test_changesummary.pas 465 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466
  1. {$INCLUDE sdo_global.inc}
  2. unit test_changesummary;
  3. interface
  4. uses
  5. SysUtils, Classes, Contnrs
  6. {$IFDEF FPC}
  7. ,fpcunit, testutils, testregistry
  8. {$ENDIF}
  9. {$IFNDEF FPC}
  10. ,TestFrameWork
  11. {$ENDIF}
  12. , test_suite_utils, sdo_types, sdo, sdo_changesummary;
  13. type
  14. TValueSetting_Test = class(TWstBaseTest)
  15. private
  16. class function CreateFactory() : ISDODataFactory;
  17. protected
  18. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  19. published
  20. procedure create_boolean();
  21. procedure create_byte();
  22. procedure create_date();
  23. procedure create_integer();
  24. procedure create_string();
  25. {$IFDEF HAS_SDO_BYTES}
  26. procedure create_bytes();
  27. {$ENDIF HAS_SDO_BYTES}
  28. {$IFDEF HAS_SDO_CHAR}
  29. procedure create_char();
  30. {$ENDIF HAS_SDO_CHAR}
  31. {$IFDEF HAS_SDO_CURRENCY}
  32. procedure create_currency();
  33. {$ENDIF HAS_SDO_CURRENCY}
  34. {$IFDEF HAS_SDO_DOUBLE}
  35. procedure create_double();
  36. {$ENDIF HAS_SDO_DOUBLE}
  37. {$IFDEF HAS_SDO_FLOAT}
  38. procedure create_float();
  39. {$ENDIF HAS_SDO_FLOAT}
  40. {$IFDEF HAS_SDO_LONG}
  41. procedure create_long();
  42. {$ENDIF HAS_SDO_LONG}
  43. {$IFDEF HAS_SDO_SHORT}
  44. procedure create_short();
  45. {$ENDIF HAS_SDO_SHORT}
  46. end;
  47. (*TDicho_Test = class(TTestCase)
  48. published
  49. procedure find();
  50. procedure build();
  51. end; *)
  52. TSDOSettingList_Test = class(TWstBaseTest)
  53. private
  54. class function CreateFactory() : ISDODataFactory;
  55. published
  56. procedure size();
  57. procedure insert();
  58. procedure append();
  59. procedure remove();
  60. procedure getItem();
  61. end;
  62. TSDOChangedDataObjectList_Test = class(TWstBaseTest)
  63. private
  64. class function CreateFactory() : ISDODataFactory;
  65. class function CreateObject() : ISDOChangedDataObjectListEx;
  66. published
  67. procedure size();
  68. procedure append();
  69. procedure find();
  70. end;
  71. TChangeRecorder_Test = class(TWstBaseTest)
  72. protected
  73. FRecorder : TChangeRecorder;
  74. FChangeSummary : ISDOChangeSummary;
  75. FFactory : ISDODataFactory;
  76. protected
  77. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  78. procedure SetUp(); override;
  79. procedure TearDown(); override;
  80. procedure InitRecorder();
  81. protected
  82. function CreateRecorder() : TChangeRecorder;
  83. class function Create_Factory() : ISDODataFactory;
  84. procedure record_int(const ADataObject : ISDODataObject; const APropName : string);
  85. procedure record_bool(const ADataObject : ISDODataObject; const APropName : string);
  86. procedure record_byte(const ADataObject : ISDODataObject; const APropName : string);
  87. {$IFDEF HAS_SDO_BYTES}
  88. procedure record_bytes(const ADataObject : ISDODataObject; const APropName : string);
  89. {$ENDIF HAS_SDO_BYTES}
  90. procedure record_date(const ADataObject : ISDODataObject; const APropName : string);
  91. procedure record_string(const ADataObject : ISDODataObject; const APropName : string);
  92. procedure record_obj(const ADataObject : ISDODataObject; const APropName : string);
  93. {$IFDEF HAS_SDO_CHAR}
  94. procedure record_char(const ADataObject : ISDODataObject; const APropName : string);
  95. {$ENDIF HAS_SDO_CHAR}
  96. {$IFDEF HAS_SDO_CURRENCY}
  97. procedure record_currency(const ADataObject : ISDODataObject; const APropName : string);
  98. {$ENDIF HAS_SDO_CURRENCY}
  99. {$IFDEF HAS_SDO_DOUBLE}
  100. procedure record_double(const ADataObject : ISDODataObject; const APropName : string);
  101. {$ENDIF HAS_SDO_DOUBLE}
  102. {$IFDEF HAS_SDO_FLOAT}
  103. procedure record_float(const ADataObject : ISDODataObject; const APropName : string);
  104. {$ENDIF HAS_SDO_FLOAT}
  105. {$IFDEF HAS_SDO_LONG}
  106. procedure record_long(const ADataObject : ISDODataObject; const APropName : string);
  107. {$ENDIF HAS_SDO_LONG}
  108. {$IFDEF HAS_SDO_SHORT}
  109. procedure record_short(const ADataObject : ISDODataObject; const APropName : string);
  110. {$ENDIF HAS_SDO_SHORT}
  111. procedure record_list_int(const ADataObject : ISDODataObject; const APropName : string);
  112. published
  113. procedure multi_call_int();
  114. procedure multi_call_boolean();
  115. procedure multi_call_byte();
  116. procedure multi_call_date();
  117. {$IFDEF HAS_SDO_BYTES}
  118. procedure multi_call_bytes();
  119. {$ENDIF HAS_SDO_BYTES}
  120. {$IFDEF HAS_SDO_CHAR}
  121. procedure multi_call_char();
  122. {$ENDIF HAS_SDO_CHAR}
  123. {$IFDEF HAS_SDO_CURRENCY}
  124. procedure multi_call_currency();
  125. {$ENDIF HAS_SDO_CURRENCY}
  126. {$IFDEF HAS_SDO_DOUBLE}
  127. procedure multi_call_double();
  128. {$ENDIF HAS_SDO_DOUBLE}
  129. {$IFDEF HAS_SDO_FLOAT}
  130. procedure multi_call_float();
  131. {$ENDIF HAS_SDO_FLOAT}
  132. {$IFDEF HAS_SDO_LONG}
  133. procedure multi_call_long();
  134. {$ENDIF HAS_SDO_LONG}
  135. {$IFDEF HAS_SDO_SHORT}
  136. procedure multi_call_short();
  137. {$ENDIF HAS_SDO_SHORT}
  138. procedure multi_call_string();
  139. procedure int_change();
  140. procedure bool_change();
  141. procedure byte_change();
  142. procedure date_change();
  143. {$IFDEF HAS_SDO_BYTES}
  144. procedure bytes_change();
  145. {$ENDIF HAS_SDO_BYTES}
  146. {$IFDEF HAS_SDO_CHAR}
  147. procedure char_change();
  148. {$ENDIF HAS_SDO_CHAR}
  149. {$IFDEF HAS_SDO_CURRENCY}
  150. procedure currency_change();
  151. {$ENDIF HAS_SDO_CURRENCY}
  152. {$IFDEF HAS_SDO_DOUBLE}
  153. procedure double_change();
  154. {$ENDIF HAS_SDO_DOUBLE}
  155. {$IFDEF HAS_SDO_FLOAT}
  156. procedure float_change();
  157. {$ENDIF HAS_SDO_FLOAT}
  158. {$IFDEF HAS_SDO_LONG}
  159. procedure long_change();
  160. {$ENDIF HAS_SDO_LONG}
  161. {$IFDEF HAS_SDO_SHORT}
  162. procedure short_change();
  163. {$ENDIF HAS_SDO_SHORT}
  164. procedure string_change();
  165. procedure object_change_contained_prop();
  166. procedure object_change_referenced_prop();
  167. end;
  168. TSDOChangeSummary_Test = class(TWstBaseTest)
  169. protected
  170. FRecorder : TChangeRecorder;
  171. FFactory : ISDODataFactory;
  172. FFactoryX : ISDODataFactory;
  173. FChangeSummary : ISDOChangeSummary;
  174. protected
  175. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  176. procedure SetUp(); override;
  177. procedure TearDown(); override;
  178. procedure InitRecorder();
  179. protected
  180. function CreateRecorder() : TChangeRecorder;
  181. class function Create_Factory() : ISDODataFactory;
  182. class function Create_FactoryX() : ISDODataFactory;
  183. private
  184. procedure check_value(
  185. const AObj : ISDODataObject;
  186. const AProp : ISDOProperty;
  187. const AValue : TValueSetting
  188. );
  189. published
  190. procedure logging_state();
  191. procedure logging_state_2();
  192. procedure isCreated();
  193. procedure isCreated_create_delete();
  194. procedure isDeleted();
  195. procedure isDeleted_nested();
  196. procedure isModified();
  197. procedure getChangedDataObjects();
  198. procedure getChangedDataObjects_contained_delete();
  199. procedure getChangedDataObjects_multi_value_prop();
  200. procedure getOldValues();
  201. procedure getOldValues_bool();
  202. procedure getOldValues_byte();
  203. procedure getOldValues_date();
  204. procedure getOldValues_integer();
  205. procedure getOldValues_object_prop();
  206. procedure getOldValues_string();
  207. {$IFDEF HAS_SDO_BYTES}
  208. procedure getOldValues_bytes();
  209. {$ENDIF HAS_SDO_BYTES}
  210. {$IFDEF HAS_SDO_CHAR}
  211. procedure getOldValues_char();
  212. {$ENDIF HAS_SDO_CHAR}
  213. {$IFDEF HAS_SDO_CURRENCY}
  214. procedure getOldValues_currency();
  215. {$ENDIF HAS_SDO_CURRENCY}
  216. {$IFDEF HAS_SDO_DOUBLE}
  217. procedure getOldValues_double();
  218. {$ENDIF HAS_SDO_DOUBLE}
  219. {$IFDEF HAS_SDO_FLOAT}
  220. procedure getOldValues_float();
  221. {$ENDIF HAS_SDO_FLOAT}
  222. {$IFDEF HAS_SDO_LONG}
  223. procedure getOldValues_long();
  224. {$ENDIF HAS_SDO_LONG}
  225. {$IFDEF HAS_SDO_SHORT}
  226. procedure getOldValues_short();
  227. {$ENDIF HAS_SDO_SHORT}
  228. procedure getOldValue();
  229. procedure getOldValue_bool();
  230. procedure getOldValue_byte();
  231. procedure getOldValue_date();
  232. procedure getOldValue_integer();
  233. procedure getOldValue_string();
  234. {$IFDEF HAS_SDO_BYTES}
  235. procedure getOldValue_bytes();
  236. {$ENDIF HAS_SDO_BYTES}
  237. {$IFDEF HAS_SDO_CHAR}
  238. procedure getOldValue_char();
  239. {$ENDIF HAS_SDO_CHAR}
  240. {$IFDEF HAS_SDO_CURRENCY}
  241. procedure getOldValue_currency();
  242. {$ENDIF HAS_SDO_CURRENCY}
  243. {$IFDEF HAS_SDO_DOUBLE}
  244. procedure getOldValue_double();
  245. {$ENDIF HAS_SDO_DOUBLE}
  246. {$IFDEF HAS_SDO_FLOAT}
  247. procedure getOldValue_float();
  248. {$ENDIF HAS_SDO_FLOAT}
  249. {$IFDEF HAS_SDO_LONG}
  250. procedure getOldValue_long();
  251. {$ENDIF HAS_SDO_LONG}
  252. {$IFDEF HAS_SDO_SHORT}
  253. procedure getOldValue_short();
  254. {$ENDIF HAS_SDO_SHORT}
  255. procedure getOldValue_object_prop();
  256. procedure getOldContainer();
  257. procedure getOldContainmentProperty();
  258. procedure undoChanges_simple() ;
  259. procedure undoChanges_simple_bool() ;
  260. procedure undoChanges_simple_byte() ;
  261. procedure undoChanges_simple_date() ;
  262. procedure undoChanges_simple_integer() ;
  263. procedure undoChanges_simple_string() ;
  264. {$IFDEF HAS_SDO_BYTES}
  265. procedure undoChanges_simple_bytes();
  266. {$ENDIF HAS_SDO_BYTES}
  267. {$IFDEF HAS_SDO_CHAR}
  268. procedure undoChanges_simple_char();
  269. {$ENDIF HAS_SDO_CHAR}
  270. {$IFDEF HAS_SDO_CURRENCY}
  271. procedure undoChanges_simple_currency();
  272. {$ENDIF HAS_SDO_CURRENCY}
  273. {$IFDEF HAS_SDO_DOUBLE}
  274. procedure undoChanges_simple_double();
  275. {$ENDIF HAS_SDO_DOUBLE}
  276. {$IFDEF HAS_SDO_FLOAT}
  277. procedure undoChanges_simple_float();
  278. {$ENDIF HAS_SDO_FLOAT}
  279. {$IFDEF HAS_SDO_LONG}
  280. procedure undoChanges_simple_long();
  281. {$ENDIF HAS_SDO_LONG}
  282. {$IFDEF HAS_SDO_SHORT}
  283. procedure undoChanges_simple_short();
  284. {$ENDIF HAS_SDO_SHORT}
  285. procedure undoChanges_simple_unset() ;
  286. procedure undoChanges_simple_unset_bool() ;
  287. procedure undoChanges_simple_unset_byte() ;
  288. procedure undoChanges_simple_unset_date() ;
  289. procedure undoChanges_simple_unset_integer() ;
  290. procedure undoChanges_simple_unset_string() ;
  291. {$IFDEF HAS_SDO_BYTES}
  292. procedure undoChanges_simple_unset_bytes();
  293. {$ENDIF HAS_SDO_BYTES}
  294. {$IFDEF HAS_SDO_CHAR}
  295. procedure undoChanges_simple_unset_char();
  296. {$ENDIF HAS_SDO_CHAR}
  297. {$IFDEF HAS_SDO_CURRENCY}
  298. procedure undoChanges_simple_unset_currency();
  299. {$ENDIF HAS_SDO_CURRENCY}
  300. {$IFDEF HAS_SDO_DOUBLE}
  301. procedure undoChanges_simple_unset_double();
  302. {$ENDIF HAS_SDO_DOUBLE}
  303. {$IFDEF HAS_SDO_FLOAT}
  304. procedure undoChanges_simple_unset_float();
  305. {$ENDIF HAS_SDO_FLOAT}
  306. {$IFDEF HAS_SDO_LONG}
  307. procedure undoChanges_simple_unset_long();
  308. {$ENDIF HAS_SDO_LONG}
  309. {$IFDEF HAS_SDO_SHORT}
  310. procedure undoChanges_simple_unset_short();
  311. {$ENDIF HAS_SDO_SHORT}
  312. procedure undoChanges_simple_setnull() ;
  313. procedure undoChanges_simple_setnull_bool() ;
  314. procedure undoChanges_simple_setnull_byte() ;
  315. procedure undoChanges_simple_setnull_date() ;
  316. procedure undoChanges_simple_setnull_integer() ;
  317. procedure undoChanges_simple_setnull_string() ;
  318. {$IFDEF HAS_SDO_BYTES}
  319. procedure undoChanges_simple_setnull_bytes();
  320. {$ENDIF HAS_SDO_BYTES}
  321. {$IFDEF HAS_SDO_CHAR}
  322. procedure undoChanges_simple_setnull_char();
  323. {$ENDIF HAS_SDO_CHAR}
  324. {$IFDEF HAS_SDO_CURRENCY}
  325. procedure undoChanges_simple_setnull_currency();
  326. {$ENDIF HAS_SDO_CURRENCY}
  327. {$IFDEF HAS_SDO_DOUBLE}
  328. procedure undoChanges_simple_setnull_double();
  329. {$ENDIF HAS_SDO_DOUBLE}
  330. {$IFDEF HAS_SDO_FLOAT}
  331. procedure undoChanges_simple_setnull_float();
  332. {$ENDIF HAS_SDO_FLOAT}
  333. {$IFDEF HAS_SDO_LONG}
  334. procedure undoChanges_simple_setnull_long();
  335. {$ENDIF HAS_SDO_LONG}
  336. {$IFDEF HAS_SDO_SHORT}
  337. procedure undoChanges_simple_setnull_short();
  338. {$ENDIF HAS_SDO_SHORT}
  339. procedure undoChanges_object_contained_startWith_OBJ_OBJ();
  340. procedure undoChanges_object_contained_startWith_OBJ_OBJ_OBJ() ;
  341. procedure undoChanges_object_contained_startWith_NIL_OBJ_OBJ() ;
  342. procedure undoChanges_object_referenced_startWIth_OBJ_OBJ() ;
  343. procedure undoChanges_object_referenced_startWith_NIL_OBJ() ;
  344. procedure undoChanges_delete_contained_object();
  345. procedure getOldXpath();
  346. procedure getOldXpath_1();
  347. procedure getOldValues_created_object_settinglist_is_empty();
  348. procedure getOldXpath_nested_deleted_object();
  349. end;
  350. TSDODataObjectCS_Test = class(TWstBaseTest)
  351. private
  352. FFactory : ISDODataFactory;
  353. protected
  354. class function Create_Factory() : ISDODataFactory;
  355. protected
  356. procedure SetUp(); override;
  357. procedure TearDown(); override;
  358. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  359. procedure check_bool_logging(const AObj : ISDODataObject; const APropName : string);
  360. procedure check_byte_logging(const AObj : ISDODataObject; const APropName : string);
  361. procedure check_date_logging(const AObj : ISDODataObject; const APropName : string);
  362. procedure check_int_logging(const AObj : ISDODataObject; const APropName : string);
  363. procedure check_string_logging(const AObj : ISDODataObject; const APropName : string);
  364. {$IFDEF HAS_SDO_BYTES}
  365. procedure check_bytes_logging(const AObj : ISDODataObject; const APropName : string);
  366. {$ENDIF HAS_SDO_BYTES}
  367. {$IFDEF HAS_SDO_CHAR}
  368. procedure check_char_logging(const AObj : ISDODataObject; const APropName : string);
  369. {$ENDIF HAS_SDO_CHAR}
  370. {$IFDEF HAS_SDO_CURRENCY}
  371. procedure check_currency_logging(const AObj : ISDODataObject; const APropName : string);
  372. {$ENDIF HAS_SDO_CURRENCY}
  373. {$IFDEF HAS_SDO_DOUBLE}
  374. procedure check_double_logging(const AObj : ISDODataObject; const APropName : string);
  375. {$ENDIF HAS_SDO_DOUBLE}
  376. {$IFDEF HAS_SDO_FLOAT}
  377. procedure check_float_logging(const AObj : ISDODataObject; const APropName : string);
  378. {$ENDIF HAS_SDO_FLOAT}
  379. {$IFDEF HAS_SDO_LONG}
  380. procedure check_long_logging(const AObj : ISDODataObject; const APropName : string);
  381. {$ENDIF HAS_SDO_LONG}
  382. {$IFDEF HAS_SDO_SHORT}
  383. procedure check_short_logging(const AObj : ISDODataObject; const APropName : string);
  384. {$ENDIF HAS_SDO_SHORT}
  385. published
  386. procedure create_default_props();
  387. procedure logging_bool();
  388. procedure logging_byte();
  389. procedure logging_date();
  390. procedure logging_int();
  391. procedure logging_string();
  392. {$IFDEF HAS_SDO_BYTES}
  393. procedure logging_bytes();
  394. {$ENDIF HAS_SDO_BYTES}
  395. {$IFDEF HAS_SDO_CHAR}
  396. procedure logging_char();
  397. {$ENDIF HAS_SDO_CHAR}
  398. {$IFDEF HAS_SDO_CURRENCY}
  399. procedure logging_currency();
  400. {$ENDIF HAS_SDO_CURRENCY}
  401. {$IFDEF HAS_SDO_DOUBLE}
  402. procedure logging_double();
  403. {$ENDIF HAS_SDO_DOUBLE}
  404. {$IFDEF HAS_SDO_FLOAT}
  405. procedure logging_float();
  406. {$ENDIF HAS_SDO_FLOAT}
  407. {$IFDEF HAS_SDO_LONG}
  408. procedure logging_long();
  409. {$ENDIF HAS_SDO_LONG}
  410. {$IFDEF HAS_SDO_SHORT}
  411. procedure logging_short();
  412. {$ENDIF HAS_SDO_SHORT}
  413. procedure getChangeSummary();
  414. end;
  415. TSDOChangeSummaryMultiValueProps_Test = class(TWstBaseTest)
  416. private
  417. FFactory : ISDODataFactory;
  418. protected
  419. procedure SetUp(); override;
  420. procedure TearDown(); override;
  421. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  422. published
  423. procedure getOldValues_bool();
  424. procedure undoChanges_bool();
  425. procedure undoChanges_bool_deleted();
  426. procedure undoChanges_nested_bool();
  427. procedure getOldValues_byte();
  428. procedure undoChanges_byte();
  429. procedure undoChanges_byte_deleted();
  430. procedure undoChanges_nested_byte();
  431. procedure getOldValues_date();
  432. procedure undoChanges_date();
  433. procedure undoChanges_date_deleted();
  434. procedure undoChanges_nested_date();
  435. procedure getOldValues_integer();
  436. procedure undoChanges_integer();
  437. procedure undoChanges_integer_deleted();
  438. procedure undoChanges_nested_integer();
  439. procedure getOldValues_objects();
  440. procedure undoChanges_object();
  441. procedure undoChanges_object_deleted();
  442. procedure undoChanges_nested_object();
  443. procedure getOldValues_string();
  444. procedure undoChanges_string();
  445. procedure undoChanges_string_deleted();
  446. procedure undoChanges_nested_string();
  447. {$IFDEF HAS_SDO_BYTES}
  448. procedure getOldValues_bytes();
  449. procedure undoChanges_bytes();
  450. procedure undoChanges_bytes_deleted();
  451. procedure undoChanges_nested_bytes();
  452. {$ENDIF HAS_SDO_BYTES}
  453. {$IFDEF HAS_SDO_CHAR}
  454. procedure getOldValues_char();
  455. procedure undoChanges_char();
  456. procedure undoChanges_char_deleted();
  457. procedure undoChanges_nested_char();
  458. {$ENDIF HAS_SDO_CHAR}
  459. {$IFDEF HAS_SDO_CURRENCY}
  460. procedure getOldValues_currency();
  461. procedure undoChanges_currency();
  462. procedure undoChanges_currency_deleted();
  463. procedure undoChanges_nested_currency();
  464. {$ENDIF HAS_SDO_CURRENCY}
  465. {$IFDEF HAS_SDO_DOUBLE}
  466. procedure getOldValues_double();
  467. procedure undoChanges_double();
  468. procedure undoChanges_double_deleted();
  469. procedure undoChanges_nested_double();
  470. {$ENDIF HAS_SDO_DOUBLE}
  471. {$IFDEF HAS_SDO_FLOAT}
  472. procedure getOldValues_float();
  473. procedure undoChanges_float();
  474. procedure undoChanges_float_deleted();
  475. procedure undoChanges_nested_float();
  476. {$ENDIF HAS_SDO_FLOAT}
  477. {$IFDEF HAS_SDO_LONG}
  478. procedure getOldValues_long();
  479. procedure undoChanges_long();
  480. procedure undoChanges_long_deleted();
  481. procedure undoChanges_nested_long();
  482. {$ENDIF HAS_SDO_LONG}
  483. {$IFDEF HAS_SDO_SHORT}
  484. procedure getOldValues_short();
  485. procedure undoChanges_short();
  486. procedure undoChanges_short_deleted();
  487. procedure undoChanges_nested_short();
  488. {$ENDIF HAS_SDO_SHORT}
  489. procedure isDeleted();
  490. procedure isDeleted_nested();
  491. procedure getChangedDataObjects_contained_delete_multiprop_1();
  492. procedure getChangedDataObjects_contained_delete_multiprop_2();
  493. procedure getChangedDataObjects_contained_delete_multiprop_3();
  494. end;
  495. implementation
  496. uses
  497. sdo_datafactory, Math,
  498. sdo_consts, DateUtils, sdo_date_utils;
  499. const
  500. s_uri = 'urn-test';
  501. s_type_object_A = 'objectA';
  502. s_type_object_B = 'objectB';
  503. s_type_object_C = 'objectC';
  504. s_bool_prop = 'bool_prop'; s_bool_propList = 'bool_prop_list';
  505. s_byte_prop = 'byte_prop'; s_byte_propList = 'byte_prop_list';
  506. s_bytes_prop = 'bytes_prop'; s_bytes_propList = 'bytes_prop_list';
  507. s_char_prop = 'char_prop'; s_char_propList = 'char_prop_list';
  508. s_currency_prop = 'currency_prop'; s_currency_propList = 'currency_prop_list';
  509. s_date_prop = 'date_prop'; s_date_propList = 'date_prop_list';
  510. s_double_prop = 'double_prop'; s_double_propList = 'double_prop_list';
  511. s_float_prop = 'float_prop'; s_float_propList = 'float_prop_list';
  512. s_integer_prop = 'integer_prop'; s_integer_propList = 'integer_prop_list';
  513. s_long_prop = 'long_prop'; s_long_propList = 'long_prop_list';
  514. s_short_prop = 'short_prop'; s_short_propList = 'short_prop_list';
  515. s_string_prop = 'string_prop'; s_string_propList = 'string_prop_list';
  516. s_object_prop = 'object_prop'; s_object_propList = 'object_prop_list';
  517. s_object_ref_prop = 'object_ref_prop';
  518. s_changesummary_prop = 'change_summary_prop';
  519. s_Employee = 'Employee';
  520. s_EmployeeType = 'EmployeeType';
  521. s_Department = 'Department';
  522. s_location = 'location';
  523. s_manager = 'manager';
  524. s_name = 'name';
  525. s_number = 'number';
  526. s_sn = 'SN';
  527. function CastExtractor(const AList : TObjectList; const AIndex : PtrInt) : PtrInt;
  528. begin
  529. Result := PtrInt(AList[AIndex]);
  530. end;
  531. function sortComparer(Item1, Item2: Pointer): Integer;
  532. begin
  533. Result := PtrInt(Item2) - PtrInt(Item1);
  534. end;
  535. function SortInterfaceList(const AIL : IInterfaceList) : IInterfaceList;
  536. var
  537. ls : TList;
  538. i : PtrInt;
  539. begin
  540. Result := TInterfaceList.Create();
  541. if ( Assigned(AIL) and ( AIL.Count > 0 ) ) then begin
  542. ls := TList.Create();
  543. try
  544. for i := 0 to Pred(AIL.Count) do begin
  545. ls.Add(Pointer(AIL.Items[i] as IInterface));
  546. end;
  547. ls.Sort(@sortComparer);
  548. for i := 0 to Pred(AIL.Count) do begin
  549. Result.Add(IInterface(ls[i]));
  550. end;
  551. finally
  552. ls.Free();
  553. end;
  554. end;
  555. end;
  556. { TValueSetting_Test }
  557. procedure TValueSetting_Test.CheckEquals(expected, actual: TSDODate; msg: string; const AStrict: Boolean);
  558. var
  559. e, a : TDateTime;
  560. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  561. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  562. begin
  563. if AStrict then begin
  564. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  565. end else begin
  566. e := NormalizeToUTC(expected);
  567. a := NormalizeToUTC(actual);
  568. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  569. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  570. CheckEquals(e_y,a_y,msg);
  571. CheckEquals(e_m,a_m,msg);
  572. CheckEquals(e_d,a_d,msg);
  573. CheckEquals(e_h,a_h,msg);
  574. CheckEquals(e_mn,a_mn,msg);
  575. CheckEquals(e_ss,a_ss,msg);
  576. CheckEquals(e_ms,a_ms,msg);
  577. end;
  578. end;
  579. class function TValueSetting_Test.CreateFactory() : ISDODataFactory;
  580. var
  581. locFactory : ISDODataFactory;
  582. procedure Add_ObjectA(const AUri : string);
  583. var
  584. locObj : ISDOType;
  585. begin
  586. locFactory.AddType(AUri,s_type_object_A,[]);
  587. locObj := locFactory.getType(AUri,s_type_object_A);
  588. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  589. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  590. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  591. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  592. {$IFDEF HAS_SDO_BYTES}
  593. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  594. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  595. {$ENDIF HAS_SDO_BYTES}
  596. {$IFDEF HAS_SDO_CHAR}
  597. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  598. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  599. {$ENDIF HAS_SDO_CHAR}
  600. {$IFDEF HAS_SDO_CURRENCY}
  601. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  602. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  603. {$ENDIF HAS_SDO_CURRENCY}
  604. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  605. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  606. {$IFDEF HAS_SDO_DOUBLE}
  607. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  608. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  609. {$ENDIF HAS_SDO_DOUBLE}
  610. {$IFDEF HAS_SDO_FLOAT}
  611. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  612. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  613. {$ENDIF HAS_SDO_FLOAT}
  614. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  615. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  616. {$IFDEF HAS_SDO_LONG}
  617. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  618. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  619. {$ENDIF HAS_SDO_LONG}
  620. {$IFDEF HAS_SDO_SHORT}
  621. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  622. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  623. {$ENDIF HAS_SDO_SHORT}
  624. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  625. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  626. end;
  627. begin
  628. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  629. Add_ObjectA(s_uri);
  630. Result := locFactory;
  631. end;
  632. procedure TValueSetting_Test.create_boolean();
  633. var
  634. ok : Boolean;
  635. boolVal : TSDOBoolean;
  636. fact : ISDODataFactory;
  637. objectAType : ISDOType;
  638. localObj : TValueSetting;
  639. prp : ISDOProperty;
  640. begin
  641. fact := CreateFactory();
  642. objectAType := fact.getType(s_uri,s_type_object_A);
  643. ok := False;
  644. try
  645. TValueSetting.Create(False,False,boolVal,nil,0);
  646. except
  647. on e : ESDOIllegalArgumentException do
  648. ok := True;
  649. end;
  650. CheckEquals(True,ok,'Invalid property parametter');
  651. // simple value
  652. prp := objectAType.getProperty(s_bool_prop) as ISDOProperty;
  653. boolVal := False;
  654. localObj := TValueSetting.Create(True,True,boolVal,prp,0);
  655. try
  656. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  657. CheckEquals( True, localObj.isSet(), 'isSet' );
  658. CheckEquals( True, localObj.isNull(), 'isNull' );
  659. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  660. CheckEquals( False, localObj.getBooleanValue(), 'getBooleanValue');
  661. CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
  662. CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
  663. CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
  664. finally
  665. FreeAndNil(localObj);
  666. end;
  667. localObj := TValueSetting.Create(False,True,boolVal,prp,0);
  668. try
  669. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  670. CheckEquals( False, localObj.isSet(), 'isSet' );
  671. CheckEquals( True, localObj.isNull(), 'isNull' );
  672. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  673. CheckEquals( False, localObj.getBooleanValue(), 'getBooleanValue');
  674. CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
  675. CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
  676. CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
  677. finally
  678. FreeAndNil(localObj);
  679. end;
  680. boolVal := False;
  681. localObj := TValueSetting.Create(True,False,boolVal,prp,0);
  682. try
  683. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  684. CheckEquals( True, localObj.isSet(), 'isSet' );
  685. CheckEquals( False, localObj.isNull(), 'isNull' );
  686. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  687. CheckEquals( boolVal, localObj.getBooleanValue(), 'getBooleanValue');
  688. CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
  689. CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
  690. CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
  691. finally
  692. FreeAndNil(localObj);
  693. end;
  694. boolVal := True;
  695. localObj := TValueSetting.Create(True,False,boolVal,prp,0);
  696. try
  697. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  698. CheckEquals( True, localObj.isSet(), 'isSet' );
  699. CheckEquals( False, localObj.isNull(), 'isNull' );
  700. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  701. CheckEquals( boolVal, localObj.getBooleanValue(), 'getBooleanValue');
  702. CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
  703. CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
  704. CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
  705. finally
  706. FreeAndNil(localObj);
  707. end;
  708. // multi value
  709. prp := objectAType.getProperty(s_bool_propList) as ISDOProperty;
  710. boolVal := True;
  711. localObj := TValueSetting.Create(True,True,boolVal,prp,12);
  712. try
  713. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  714. CheckEquals( True, localObj.isSet(), 'isSet' );
  715. CheckEquals( True, localObj.isNull(), 'isNull' );
  716. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  717. CheckEquals( False, localObj.getBooleanValue(), 'getBooleanValue');
  718. CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
  719. CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
  720. CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
  721. finally
  722. FreeAndNil(localObj);
  723. end;
  724. boolVal := True;
  725. localObj := TValueSetting.Create(False,True,boolVal,prp,23);
  726. try
  727. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  728. CheckEquals( False, localObj.isSet(), 'isSet' );
  729. CheckEquals( True, localObj.isNull(), 'isNull' );
  730. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  731. CheckEquals( False, localObj.getBooleanValue(), 'getBooleanValue');
  732. CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
  733. CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
  734. CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
  735. finally
  736. FreeAndNil(localObj);
  737. end;
  738. boolVal := False;
  739. localObj := TValueSetting.Create(True,False,boolVal,prp,34);
  740. try
  741. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  742. CheckEquals( True, localObj.isSet(), 'isSet' );
  743. CheckEquals( False, localObj.isNull(), 'isNull' );
  744. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  745. CheckEquals( boolVal, localObj.getBooleanValue(), 'getBooleanValue');
  746. CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
  747. CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
  748. CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
  749. finally
  750. FreeAndNil(localObj);
  751. end;
  752. boolVal := True;
  753. localObj := TValueSetting.Create(True,False,boolVal,prp,34);
  754. try
  755. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  756. CheckEquals( True, localObj.isSet(), 'isSet' );
  757. CheckEquals( False, localObj.isNull(), 'isNull' );
  758. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  759. CheckEquals( boolVal, localObj.getBooleanValue(), 'getBooleanValue');
  760. CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
  761. CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
  762. CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
  763. finally
  764. FreeAndNil(localObj);
  765. end;
  766. end;
  767. procedure TValueSetting_Test.create_byte();
  768. var
  769. ok : Boolean;
  770. locVal : TSDOByte;
  771. fact : ISDODataFactory;
  772. objectAType : ISDOType;
  773. localObj : TValueSetting;
  774. prp : ISDOProperty;
  775. begin
  776. locVal := 123;
  777. fact := CreateFactory();
  778. objectAType := fact.getType(s_uri,s_type_object_A);
  779. ok := False;
  780. try
  781. TValueSetting.Create(False,False,locVal,nil,0);
  782. except
  783. on e : ESDOIllegalArgumentException do
  784. ok := True;
  785. end;
  786. CheckEquals(True,ok,'Invalid property parametter');
  787. // simple value
  788. prp := objectAType.getProperty(s_byte_prop) as ISDOProperty;
  789. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  790. try
  791. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  792. CheckEquals( True, localObj.isSet(), 'isSet' );
  793. CheckEquals( True, localObj.isNull(), 'isNull' );
  794. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  795. CheckEquals( 0, localObj.getByteValue(), 'getByteValue');
  796. CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
  797. CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
  798. CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
  799. finally
  800. FreeAndNil(localObj);
  801. end;
  802. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  803. try
  804. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  805. CheckEquals( False, localObj.isSet(), 'isSet' );
  806. CheckEquals( True, localObj.isNull(), 'isNull' );
  807. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  808. CheckEquals( 0, localObj.getByteValue(), 'getByteValue');
  809. CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
  810. CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
  811. CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
  812. finally
  813. FreeAndNil(localObj);
  814. end;
  815. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  816. try
  817. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  818. CheckEquals( True, localObj.isSet(), 'isSet' );
  819. CheckEquals( False, localObj.isNull(), 'isNull' );
  820. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  821. CheckEquals( locVal, localObj.getByteValue(), 'getByteValue');
  822. CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
  823. CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
  824. CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
  825. finally
  826. FreeAndNil(localObj);
  827. end;
  828. locVal := 67;
  829. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  830. try
  831. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  832. CheckEquals( True, localObj.isSet(), 'isSet' );
  833. CheckEquals( False, localObj.isNull(), 'isNull' );
  834. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  835. CheckEquals( locVal, localObj.getByteValue(), 'getByteValue');
  836. CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
  837. CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
  838. CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
  839. finally
  840. FreeAndNil(localObj);
  841. end;
  842. // multi value
  843. prp := objectAType.getProperty(s_byte_propList) as ISDOProperty;
  844. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  845. try
  846. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  847. CheckEquals( True, localObj.isSet(), 'isSet' );
  848. CheckEquals( True, localObj.isNull(), 'isNull' );
  849. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  850. CheckEquals( 0, localObj.getByteValue(), 'getByteValue');
  851. CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
  852. CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
  853. CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
  854. finally
  855. FreeAndNil(localObj);
  856. end;
  857. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  858. try
  859. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  860. CheckEquals( False, localObj.isSet(), 'isSet' );
  861. CheckEquals( True, localObj.isNull(), 'isNull' );
  862. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  863. CheckEquals( 0, localObj.getByteValue(), 'getByteValue');
  864. CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
  865. CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
  866. CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
  867. finally
  868. FreeAndNil(localObj);
  869. end;
  870. locVal := 34;
  871. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  872. try
  873. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  874. CheckEquals( True, localObj.isSet(), 'isSet' );
  875. CheckEquals( False, localObj.isNull(), 'isNull' );
  876. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  877. CheckEquals( locVal, localObj.getByteValue(), 'getByteValue');
  878. CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
  879. CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
  880. CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
  881. finally
  882. FreeAndNil(localObj);
  883. end;
  884. end;
  885. {$IFDEF HAS_SDO_BYTES}
  886. procedure TValueSetting_Test.create_bytes();
  887. const
  888. PROP_NAME = s_bytes_prop;
  889. LIST_PROP_NAME = s_bytes_propList;
  890. VAL_1 : array[0..2] of TSDOByte = ( 2, 24, 12 );
  891. VAL_2 : array[0..5] of TSDOByte = ( 1, 07, 6, 2, 24, 12 );
  892. VAL_3 : array[0..1] of TSDOByte = ( 24,6 );
  893. function LocalCopy(const AValue : array of TSDOByte) : TSDOBytes;
  894. begin
  895. SetLength(Result,Length(AValue));
  896. if ( Length(Result) > 0 ) then
  897. Move(AValue[0],Result[0],Length(Result));
  898. end;
  899. var
  900. ok : Boolean;
  901. locVal : TSDOBytes;
  902. fact : ISDODataFactory;
  903. objectAType : ISDOType;
  904. localObj : TValueSetting;
  905. prp : ISDOProperty;
  906. begin
  907. locVal := LocalCopy(VAL_1);
  908. fact := CreateFactory();
  909. objectAType := fact.getType(s_uri,s_type_object_A);
  910. ok := False;
  911. try
  912. TValueSetting.Create(False,False,locVal,nil,0);
  913. except
  914. on e : ESDOIllegalArgumentException do
  915. ok := True;
  916. end;
  917. CheckEquals(True,ok,'Invalid property parametter');
  918. // simple value
  919. prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
  920. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  921. try
  922. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  923. CheckEquals( True, localObj.isSet(), 'isSet' );
  924. CheckEquals( True, localObj.isNull(), 'isNull' );
  925. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  926. CheckEquals( nil, localObj.getBytesValue(), 'getBytesValue');
  927. CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
  928. finally
  929. FreeAndNil(localObj);
  930. end;
  931. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  932. try
  933. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  934. CheckEquals( False, localObj.isSet(), 'isSet' );
  935. CheckEquals( True, localObj.isNull(), 'isNull' );
  936. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  937. CheckEquals( nil, localObj.getBytesValue(), 'getBytesValue');
  938. CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
  939. finally
  940. FreeAndNil(localObj);
  941. end;
  942. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  943. try
  944. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  945. CheckEquals( True, localObj.isSet(), 'isSet' );
  946. CheckEquals( False, localObj.isNull(), 'isNull' );
  947. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  948. CheckEquals( locVal, localObj.getBytesValue(), 'getBytesValue');
  949. CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
  950. finally
  951. FreeAndNil(localObj);
  952. end;
  953. locVal := LocalCopy(VAL_2);
  954. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  955. try
  956. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  957. CheckEquals( True, localObj.isSet(), 'isSet' );
  958. CheckEquals( False, localObj.isNull(), 'isNull' );
  959. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  960. CheckEquals( locVal, localObj.getBytesValue(), 'getBytesValue');
  961. CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
  962. finally
  963. FreeAndNil(localObj);
  964. end;
  965. // multi value
  966. prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
  967. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  968. try
  969. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  970. CheckEquals( True, localObj.isSet(), 'isSet' );
  971. CheckEquals( True, localObj.isNull(), 'isNull' );
  972. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  973. CheckEquals( nil, localObj.getBytesValue(), 'getBytesValue');
  974. CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
  975. finally
  976. FreeAndNil(localObj);
  977. end;
  978. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  979. try
  980. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  981. CheckEquals( False, localObj.isSet(), 'isSet' );
  982. CheckEquals( True, localObj.isNull(), 'isNull' );
  983. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  984. CheckEquals( nil, localObj.getBytesValue(), 'getBytesValue');
  985. CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
  986. finally
  987. FreeAndNil(localObj);
  988. end;
  989. locVal := LocalCopy(VAL_3);
  990. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  991. try
  992. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  993. CheckEquals( True, localObj.isSet(), 'isSet' );
  994. CheckEquals( False, localObj.isNull(), 'isNull' );
  995. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  996. CheckEquals( locVal, localObj.getBytesValue(), 'getBytesValue');
  997. CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
  998. finally
  999. FreeAndNil(localObj);
  1000. end;
  1001. end;
  1002. {$ENDIF HAS_SDO_BYTES}
  1003. {$IFDEF HAS_SDO_CHAR}
  1004. procedure TValueSetting_Test.create_char();
  1005. const
  1006. PROP_NAME = s_char_prop;
  1007. LIST_PROP_NAME = s_char_propList;
  1008. var
  1009. ok : Boolean;
  1010. locVal : TSDOChar;
  1011. fact : ISDODataFactory;
  1012. objectAType : ISDOType;
  1013. localObj : TValueSetting;
  1014. prp : ISDOProperty;
  1015. begin
  1016. locVal := 'K';
  1017. fact := CreateFactory();
  1018. objectAType := fact.getType(s_uri,s_type_object_A);
  1019. ok := False;
  1020. try
  1021. TValueSetting.Create(False,False,locVal,nil,0);
  1022. except
  1023. on e : ESDOIllegalArgumentException do
  1024. ok := True;
  1025. end;
  1026. CheckEquals(True,ok,'Invalid property parametter');
  1027. // simple value
  1028. prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
  1029. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  1030. try
  1031. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1032. CheckEquals( True, localObj.isSet(), 'isSet' );
  1033. CheckEquals( True, localObj.isNull(), 'isNull' );
  1034. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1035. CheckEquals( #0, localObj.getCharacterValue(), 'getCharacterValue');
  1036. CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1037. CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
  1038. CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
  1039. {$IFDEF HAS_SDO_LONG}
  1040. CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
  1041. {$ENDIF HAS_SDO_LONG}
  1042. {$IFDEF HAS_SDO_SHORT}
  1043. CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
  1044. {$ENDIF HAS_SDO_SHORT}
  1045. CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
  1046. finally
  1047. FreeAndNil(localObj);
  1048. end;
  1049. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  1050. try
  1051. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1052. CheckEquals( False, localObj.isSet(), 'isSet' );
  1053. CheckEquals( True, localObj.isNull(), 'isNull' );
  1054. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1055. CheckEquals( #0, localObj.getCharacterValue(), 'getCharacterValue');
  1056. CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1057. CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
  1058. CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
  1059. {$IFDEF HAS_SDO_LONG}
  1060. CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
  1061. {$ENDIF HAS_SDO_LONG}
  1062. {$IFDEF HAS_SDO_SHORT}
  1063. CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
  1064. {$ENDIF HAS_SDO_SHORT}
  1065. CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
  1066. finally
  1067. FreeAndNil(localObj);
  1068. end;
  1069. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1070. try
  1071. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1072. CheckEquals( True, localObj.isSet(), 'isSet' );
  1073. CheckEquals( False, localObj.isNull(), 'isNull' );
  1074. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1075. CheckEquals( locVal, localObj.getCharacterValue(), 'getCharacterValue');
  1076. CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1077. CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
  1078. CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
  1079. {$IFDEF HAS_SDO_LONG}
  1080. CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
  1081. {$ENDIF HAS_SDO_LONG}
  1082. {$IFDEF HAS_SDO_SHORT}
  1083. CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
  1084. {$ENDIF HAS_SDO_SHORT}
  1085. CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
  1086. finally
  1087. FreeAndNil(localObj);
  1088. end;
  1089. locVal := 'h';
  1090. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1091. try
  1092. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1093. CheckEquals( True, localObj.isSet(), 'isSet' );
  1094. CheckEquals( False, localObj.isNull(), 'isNull' );
  1095. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1096. CheckEquals( locVal, localObj.getCharacterValue(), 'getCharacterValue');
  1097. CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1098. CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
  1099. CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
  1100. {$IFDEF HAS_SDO_LONG}
  1101. CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
  1102. {$ENDIF HAS_SDO_LONG}
  1103. {$IFDEF HAS_SDO_SHORT}
  1104. CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
  1105. {$ENDIF HAS_SDO_SHORT}
  1106. CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
  1107. finally
  1108. FreeAndNil(localObj);
  1109. end;
  1110. // multi value
  1111. prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
  1112. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  1113. try
  1114. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1115. CheckEquals( True, localObj.isSet(), 'isSet' );
  1116. CheckEquals( True, localObj.isNull(), 'isNull' );
  1117. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  1118. CheckEquals( #0, localObj.getCharacterValue(), 'getCharacterValue');
  1119. CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1120. CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
  1121. CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
  1122. {$IFDEF HAS_SDO_LONG}
  1123. CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
  1124. {$ENDIF HAS_SDO_LONG}
  1125. {$IFDEF HAS_SDO_SHORT}
  1126. CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
  1127. {$ENDIF HAS_SDO_SHORT}
  1128. CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
  1129. finally
  1130. FreeAndNil(localObj);
  1131. end;
  1132. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  1133. try
  1134. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1135. CheckEquals( False, localObj.isSet(), 'isSet' );
  1136. CheckEquals( True, localObj.isNull(), 'isNull' );
  1137. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  1138. CheckEquals( #0, localObj.getCharacterValue(), 'getCharacterValue');
  1139. CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1140. CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
  1141. CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
  1142. {$IFDEF HAS_SDO_LONG}
  1143. CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
  1144. {$ENDIF HAS_SDO_LONG}
  1145. {$IFDEF HAS_SDO_SHORT}
  1146. CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
  1147. {$ENDIF HAS_SDO_SHORT}
  1148. CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
  1149. finally
  1150. FreeAndNil(localObj);
  1151. end;
  1152. locVal := '1';
  1153. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1154. try
  1155. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1156. CheckEquals( True, localObj.isSet(), 'isSet' );
  1157. CheckEquals( False, localObj.isNull(), 'isNull' );
  1158. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1159. CheckEquals( locVal, localObj.getCharacterValue(), 'getCharacterValue');
  1160. CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1161. CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
  1162. CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
  1163. {$IFDEF HAS_SDO_LONG}
  1164. CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
  1165. {$ENDIF HAS_SDO_LONG}
  1166. {$IFDEF HAS_SDO_SHORT}
  1167. CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
  1168. {$ENDIF HAS_SDO_SHORT}
  1169. CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
  1170. finally
  1171. FreeAndNil(localObj);
  1172. end;
  1173. end;
  1174. {$ENDIF HAS_SDO_CHAR}
  1175. procedure TValueSetting_Test.create_date();
  1176. var
  1177. ok : Boolean;
  1178. locVal : TSDODateTime;
  1179. fact : ISDODataFactory;
  1180. objectAType : ISDOType;
  1181. localObj : TValueSetting;
  1182. prp : ISDOProperty;
  1183. begin
  1184. FillChar(locVal,SizeOf(locVal),#0);
  1185. fact := CreateFactory();
  1186. objectAType := fact.getType(s_uri,s_type_object_A);
  1187. ok := False;
  1188. try
  1189. TValueSetting.Create(False,False,locVal,nil,0);
  1190. except
  1191. on e : ESDOIllegalArgumentException do
  1192. ok := True;
  1193. end;
  1194. CheckEquals(True,ok,'Invalid property parametter');
  1195. // simple value
  1196. prp := objectAType.getProperty(s_date_prop) as ISDOProperty;
  1197. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  1198. try
  1199. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1200. CheckEquals( True, localObj.isSet(), 'isSet' );
  1201. CheckEquals( True, localObj.isNull(), 'isNull' );
  1202. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1203. CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
  1204. CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
  1205. finally
  1206. FreeAndNil(localObj);
  1207. end;
  1208. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  1209. try
  1210. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1211. CheckEquals( False, localObj.isSet(), 'isSet' );
  1212. CheckEquals( True, localObj.isNull(), 'isNull' );
  1213. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1214. CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
  1215. CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
  1216. finally
  1217. FreeAndNil(localObj);
  1218. end;
  1219. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1220. try
  1221. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1222. CheckEquals( True, localObj.isSet(), 'isSet' );
  1223. CheckEquals( False, localObj.isNull(), 'isNull' );
  1224. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1225. CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
  1226. CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
  1227. finally
  1228. FreeAndNil(localObj);
  1229. end;
  1230. locVal.Date := 39000;
  1231. locVal.HourOffset := 1;
  1232. locVal.MinuteOffset := 2;
  1233. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1234. try
  1235. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1236. CheckEquals( True, localObj.isSet(), 'isSet' );
  1237. CheckEquals( False, localObj.isNull(), 'isNull' );
  1238. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1239. CheckEquals( locVal, localObj.getDateValue(), 'getDateValue');
  1240. CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
  1241. finally
  1242. FreeAndNil(localObj);
  1243. end;
  1244. // multi value
  1245. prp := objectAType.getProperty(s_date_propList) as ISDOProperty;
  1246. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  1247. try
  1248. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1249. CheckEquals( True, localObj.isSet(), 'isSet' );
  1250. CheckEquals( True, localObj.isNull(), 'isNull' );
  1251. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  1252. CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
  1253. CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
  1254. finally
  1255. FreeAndNil(localObj);
  1256. end;
  1257. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  1258. try
  1259. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1260. CheckEquals( False, localObj.isSet(), 'isSet' );
  1261. CheckEquals( True, localObj.isNull(), 'isNull' );
  1262. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  1263. CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
  1264. CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
  1265. finally
  1266. FreeAndNil(localObj);
  1267. end;
  1268. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1269. try
  1270. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1271. CheckEquals( True, localObj.isSet(), 'isSet' );
  1272. CheckEquals( False, localObj.isNull(), 'isNull' );
  1273. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1274. CheckEquals( locVal, localObj.getDateValue(), 'getDateValue');
  1275. CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
  1276. finally
  1277. FreeAndNil(localObj);
  1278. end;
  1279. end;
  1280. {$IFDEF HAS_SDO_CURRENCY}
  1281. procedure TValueSetting_Test.create_currency();
  1282. const
  1283. PROP_NAME = s_currency_prop;
  1284. LIST_PROP_NAME = s_currency_propList;
  1285. var
  1286. ok : Boolean;
  1287. locVal : TSDOCurrency;
  1288. fact : ISDODataFactory;
  1289. objectAType : ISDOType;
  1290. localObj : TValueSetting;
  1291. prp : ISDOProperty;
  1292. begin
  1293. locVal := 67;
  1294. fact := CreateFactory();
  1295. objectAType := fact.getType(s_uri,s_type_object_A);
  1296. ok := False;
  1297. try
  1298. TValueSetting.Create(False,False,locVal,nil,0);
  1299. except
  1300. on e : ESDOIllegalArgumentException do
  1301. ok := True;
  1302. end;
  1303. CheckEquals(True,ok,'Invalid property parametter');
  1304. // simple value
  1305. prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
  1306. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  1307. try
  1308. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1309. CheckEquals( True, localObj.isSet(), 'isSet' );
  1310. CheckEquals( True, localObj.isNull(), 'isNull' );
  1311. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1312. CheckEquals( 0, localObj.getCurrencyValue(), 'getCurrencyValue');
  1313. {$IFDEF HAS_SDO_FLOAT}
  1314. CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
  1315. {$ENDIF HAS_SDO_FLOAT}
  1316. {$IFDEF HAS_SDO_DOUBLE}
  1317. CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1318. {$ENDIF HAS_SDO_DOUBLE}
  1319. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1320. finally
  1321. FreeAndNil(localObj);
  1322. end;
  1323. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  1324. try
  1325. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1326. CheckEquals( False, localObj.isSet(), 'isSet' );
  1327. CheckEquals( True, localObj.isNull(), 'isNull' );
  1328. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1329. CheckEquals( 0, localObj.getCurrencyValue(), 'getCurrencyValue');
  1330. {$IFDEF HAS_SDO_FLOAT}
  1331. CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
  1332. {$ENDIF HAS_SDO_FLOAT}
  1333. {$IFDEF HAS_SDO_DOUBLE}
  1334. CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1335. {$ENDIF HAS_SDO_DOUBLE}
  1336. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1337. finally
  1338. FreeAndNil(localObj);
  1339. end;
  1340. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1341. try
  1342. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1343. CheckEquals( True, localObj.isSet(), 'isSet' );
  1344. CheckEquals( False, localObj.isNull(), 'isNull' );
  1345. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1346. CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
  1347. {$IFDEF HAS_SDO_FLOAT}
  1348. CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
  1349. {$ENDIF HAS_SDO_FLOAT}
  1350. {$IFDEF HAS_SDO_DOUBLE}
  1351. CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1352. {$ENDIF HAS_SDO_DOUBLE}
  1353. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1354. finally
  1355. FreeAndNil(localObj);
  1356. end;
  1357. locVal := 45;
  1358. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1359. try
  1360. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1361. CheckEquals( True, localObj.isSet(), 'isSet' );
  1362. CheckEquals( False, localObj.isNull(), 'isNull' );
  1363. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1364. CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
  1365. {$IFDEF HAS_SDO_FLOAT}
  1366. CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
  1367. {$ENDIF HAS_SDO_FLOAT}
  1368. {$IFDEF HAS_SDO_DOUBLE}
  1369. CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1370. {$ENDIF HAS_SDO_DOUBLE}
  1371. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1372. finally
  1373. FreeAndNil(localObj);
  1374. end;
  1375. locVal := 1236891478.2522;
  1376. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1377. try
  1378. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1379. CheckEquals( True, localObj.isSet(), 'isSet' );
  1380. CheckEquals( False, localObj.isNull(), 'isNull' );
  1381. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1382. CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
  1383. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1384. finally
  1385. FreeAndNil(localObj);
  1386. end;
  1387. locVal := -225544778.8622;
  1388. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1389. try
  1390. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1391. CheckEquals( True, localObj.isSet(), 'isSet' );
  1392. CheckEquals( False, localObj.isNull(), 'isNull' );
  1393. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1394. CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
  1395. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1396. finally
  1397. FreeAndNil(localObj);
  1398. end;
  1399. // multi value
  1400. prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
  1401. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  1402. try
  1403. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1404. CheckEquals( True, localObj.isSet(), 'isSet' );
  1405. CheckEquals( True, localObj.isNull(), 'isNull' );
  1406. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  1407. CheckEquals( 0, localObj.getCurrencyValue(), 'getCurrencyValue');
  1408. {$IFDEF HAS_SDO_FLOAT}
  1409. CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
  1410. {$ENDIF HAS_SDO_FLOAT}
  1411. {$IFDEF HAS_SDO_DOUBLE}
  1412. CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1413. {$ENDIF HAS_SDO_DOUBLE}
  1414. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1415. finally
  1416. FreeAndNil(localObj);
  1417. end;
  1418. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  1419. try
  1420. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1421. CheckEquals( False, localObj.isSet(), 'isSet' );
  1422. CheckEquals( True, localObj.isNull(), 'isNull' );
  1423. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  1424. CheckEquals( 0, localObj.getCurrencyValue(), 'getCurrencyValue');
  1425. {$IFDEF HAS_SDO_FLOAT}
  1426. CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
  1427. {$ENDIF HAS_SDO_FLOAT}
  1428. {$IFDEF HAS_SDO_DOUBLE}
  1429. CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1430. {$ENDIF HAS_SDO_DOUBLE}
  1431. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1432. finally
  1433. FreeAndNil(localObj);
  1434. end;
  1435. locVal := 99;
  1436. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1437. try
  1438. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1439. CheckEquals( True, localObj.isSet(), 'isSet' );
  1440. CheckEquals( False, localObj.isNull(), 'isNull' );
  1441. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1442. CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
  1443. {$IFDEF HAS_SDO_FLOAT}
  1444. CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
  1445. {$ENDIF HAS_SDO_FLOAT}
  1446. {$IFDEF HAS_SDO_DOUBLE}
  1447. CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1448. {$ENDIF HAS_SDO_DOUBLE}
  1449. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1450. finally
  1451. FreeAndNil(localObj);
  1452. end;
  1453. locVal := 24667733.1155;
  1454. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1455. try
  1456. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1457. CheckEquals( True, localObj.isSet(), 'isSet' );
  1458. CheckEquals( False, localObj.isNull(), 'isNull' );
  1459. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1460. CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
  1461. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1462. finally
  1463. FreeAndNil(localObj);
  1464. end;
  1465. locVal := -5588663211424;
  1466. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1467. try
  1468. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1469. CheckEquals( True, localObj.isSet(), 'isSet' );
  1470. CheckEquals( False, localObj.isNull(), 'isNull' );
  1471. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1472. CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
  1473. CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
  1474. finally
  1475. FreeAndNil(localObj);
  1476. end;
  1477. end;
  1478. {$ENDIF HAS_SDO_CURRENCY}
  1479. {$IFDEF HAS_SDO_DOUBLE}
  1480. procedure TValueSetting_Test.create_double();
  1481. const
  1482. PROP_NAME = s_double_prop;
  1483. LIST_PROP_NAME = s_double_propList;
  1484. var
  1485. ok : Boolean;
  1486. locVal : TSDODouble;
  1487. fact : ISDODataFactory;
  1488. objectAType : ISDOType;
  1489. localObj : TValueSetting;
  1490. prp : ISDOProperty;
  1491. begin
  1492. locVal := 67;
  1493. fact := CreateFactory();
  1494. objectAType := fact.getType(s_uri,s_type_object_A);
  1495. ok := False;
  1496. try
  1497. TValueSetting.Create(False,False,locVal,nil,0);
  1498. except
  1499. on e : ESDOIllegalArgumentException do
  1500. ok := True;
  1501. end;
  1502. CheckEquals(True,ok,'Invalid property parametter');
  1503. // simple value
  1504. prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
  1505. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  1506. try
  1507. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1508. CheckEquals( True, localObj.isSet(), 'isSet' );
  1509. CheckEquals( True, localObj.isNull(), 'isNull' );
  1510. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1511. CheckEquals( 0, localObj.getDoubleValue(), 'getDoubleValue');
  1512. {$IFDEF HAS_SDO_CURRENCY}
  1513. CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1514. {$ENDIF HAS_SDO_CURRENCY}
  1515. {$IFDEF HAS_SDO_FLOAT}
  1516. CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
  1517. {$ENDIF HAS_SDO_FLOAT}
  1518. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1519. finally
  1520. FreeAndNil(localObj);
  1521. end;
  1522. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  1523. try
  1524. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1525. CheckEquals( False, localObj.isSet(), 'isSet' );
  1526. CheckEquals( True, localObj.isNull(), 'isNull' );
  1527. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1528. CheckEquals( 0, localObj.getDoubleValue(), 'getDoubleValue');
  1529. {$IFDEF HAS_SDO_CURRENCY}
  1530. CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1531. {$ENDIF HAS_SDO_CURRENCY}
  1532. {$IFDEF HAS_SDO_FLOAT}
  1533. CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
  1534. {$ENDIF HAS_SDO_FLOAT}
  1535. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1536. finally
  1537. FreeAndNil(localObj);
  1538. end;
  1539. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1540. try
  1541. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1542. CheckEquals( True, localObj.isSet(), 'isSet' );
  1543. CheckEquals( False, localObj.isNull(), 'isNull' );
  1544. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1545. CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
  1546. {$IFDEF HAS_SDO_CURRENCY}
  1547. CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1548. {$ENDIF HAS_SDO_CURRENCY}
  1549. {$IFDEF HAS_SDO_FLOAT}
  1550. CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
  1551. {$ENDIF HAS_SDO_FLOAT}
  1552. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1553. finally
  1554. FreeAndNil(localObj);
  1555. end;
  1556. locVal := 45;
  1557. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1558. try
  1559. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1560. CheckEquals( True, localObj.isSet(), 'isSet' );
  1561. CheckEquals( False, localObj.isNull(), 'isNull' );
  1562. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1563. CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
  1564. {$IFDEF HAS_SDO_CURRENCY}
  1565. CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1566. {$ENDIF HAS_SDO_CURRENCY}
  1567. {$IFDEF HAS_SDO_FLOAT}
  1568. CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
  1569. {$ENDIF HAS_SDO_FLOAT}
  1570. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1571. finally
  1572. FreeAndNil(localObj);
  1573. end;
  1574. locVal := 12365479;
  1575. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1576. try
  1577. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1578. CheckEquals( True, localObj.isSet(), 'isSet' );
  1579. CheckEquals( False, localObj.isNull(), 'isNull' );
  1580. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1581. CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
  1582. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1583. finally
  1584. FreeAndNil(localObj);
  1585. end;
  1586. locVal := -225544721;
  1587. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1588. try
  1589. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1590. CheckEquals( True, localObj.isSet(), 'isSet' );
  1591. CheckEquals( False, localObj.isNull(), 'isNull' );
  1592. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1593. CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
  1594. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1595. finally
  1596. FreeAndNil(localObj);
  1597. end;
  1598. // multi value
  1599. prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
  1600. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  1601. try
  1602. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1603. CheckEquals( True, localObj.isSet(), 'isSet' );
  1604. CheckEquals( True, localObj.isNull(), 'isNull' );
  1605. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  1606. CheckEquals( 0, localObj.getDoubleValue(), 'getDoubleValue');
  1607. {$IFDEF HAS_SDO_CURRENCY}
  1608. CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1609. {$ENDIF HAS_SDO_CURRENCY}
  1610. {$IFDEF HAS_SDO_FLOAT}
  1611. CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
  1612. {$ENDIF HAS_SDO_FLOAT}
  1613. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1614. finally
  1615. FreeAndNil(localObj);
  1616. end;
  1617. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  1618. try
  1619. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1620. CheckEquals( False, localObj.isSet(), 'isSet' );
  1621. CheckEquals( True, localObj.isNull(), 'isNull' );
  1622. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  1623. CheckEquals( 0, localObj.getDoubleValue(), 'getDoubleValue');
  1624. {$IFDEF HAS_SDO_CURRENCY}
  1625. CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1626. {$ENDIF HAS_SDO_CURRENCY}
  1627. {$IFDEF HAS_SDO_FLOAT}
  1628. CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
  1629. {$ENDIF HAS_SDO_FLOAT}
  1630. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1631. finally
  1632. FreeAndNil(localObj);
  1633. end;
  1634. locVal := 99;
  1635. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1636. try
  1637. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1638. CheckEquals( True, localObj.isSet(), 'isSet' );
  1639. CheckEquals( False, localObj.isNull(), 'isNull' );
  1640. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1641. CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
  1642. {$IFDEF HAS_SDO_CURRENCY}
  1643. CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1644. {$ENDIF HAS_SDO_CURRENCY}
  1645. {$IFDEF HAS_SDO_FLOAT}
  1646. CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
  1647. {$ENDIF HAS_SDO_FLOAT}
  1648. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1649. finally
  1650. FreeAndNil(localObj);
  1651. end;
  1652. locVal := 8855224;
  1653. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1654. try
  1655. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1656. CheckEquals( True, localObj.isSet(), 'isSet' );
  1657. CheckEquals( False, localObj.isNull(), 'isNull' );
  1658. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1659. CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
  1660. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1661. finally
  1662. FreeAndNil(localObj);
  1663. end;
  1664. locVal := -55886424;
  1665. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1666. try
  1667. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1668. CheckEquals( True, localObj.isSet(), 'isSet' );
  1669. CheckEquals( False, localObj.isNull(), 'isNull' );
  1670. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1671. CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
  1672. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
  1673. finally
  1674. FreeAndNil(localObj);
  1675. end;
  1676. end;
  1677. {$ENDIF HAS_SDO_DOUBLE}
  1678. {$IFDEF HAS_SDO_FLOAT}
  1679. procedure TValueSetting_Test.create_float();
  1680. const
  1681. PROP_NAME = s_float_prop;
  1682. LIST_PROP_NAME = s_float_propList;
  1683. var
  1684. ok : Boolean;
  1685. locVal : TSDOFloat;
  1686. fact : ISDODataFactory;
  1687. objectAType : ISDOType;
  1688. localObj : TValueSetting;
  1689. prp : ISDOProperty;
  1690. begin
  1691. locVal := 67;
  1692. fact := CreateFactory();
  1693. objectAType := fact.getType(s_uri,s_type_object_A);
  1694. ok := False;
  1695. try
  1696. TValueSetting.Create(False,False,locVal,nil,0);
  1697. except
  1698. on e : ESDOIllegalArgumentException do
  1699. ok := True;
  1700. end;
  1701. CheckEquals(True,ok,'Invalid property parametter');
  1702. // simple value
  1703. prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
  1704. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  1705. try
  1706. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1707. CheckEquals( True, localObj.isSet(), 'isSet' );
  1708. CheckEquals( True, localObj.isNull(), 'isNull' );
  1709. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1710. CheckEquals( 0, localObj.getFloatValue(), 'getFloatValue');
  1711. {$IFDEF HAS_SDO_CURRENCY}
  1712. CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1713. {$ENDIF HAS_SDO_CURRENCY}
  1714. {$IFDEF HAS_SDO_DOUBLE}
  1715. CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1716. {$ENDIF HAS_SDO_DOUBLE}
  1717. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1718. finally
  1719. FreeAndNil(localObj);
  1720. end;
  1721. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  1722. try
  1723. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1724. CheckEquals( False, localObj.isSet(), 'isSet' );
  1725. CheckEquals( True, localObj.isNull(), 'isNull' );
  1726. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1727. CheckEquals( 0, localObj.getFloatValue(), 'getFloatValue');
  1728. {$IFDEF HAS_SDO_CURRENCY}
  1729. CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1730. {$ENDIF HAS_SDO_CURRENCY}
  1731. {$IFDEF HAS_SDO_DOUBLE}
  1732. CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1733. {$ENDIF HAS_SDO_DOUBLE}
  1734. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1735. finally
  1736. FreeAndNil(localObj);
  1737. end;
  1738. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1739. try
  1740. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1741. CheckEquals( True, localObj.isSet(), 'isSet' );
  1742. CheckEquals( False, localObj.isNull(), 'isNull' );
  1743. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1744. CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
  1745. {$IFDEF HAS_SDO_CURRENCY}
  1746. CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1747. {$ENDIF HAS_SDO_CURRENCY}
  1748. {$IFDEF HAS_SDO_DOUBLE}
  1749. CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1750. {$ENDIF HAS_SDO_DOUBLE}
  1751. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1752. finally
  1753. FreeAndNil(localObj);
  1754. end;
  1755. locVal := 45;
  1756. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1757. try
  1758. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1759. CheckEquals( True, localObj.isSet(), 'isSet' );
  1760. CheckEquals( False, localObj.isNull(), 'isNull' );
  1761. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1762. CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
  1763. {$IFDEF HAS_SDO_CURRENCY}
  1764. CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1765. {$ENDIF HAS_SDO_CURRENCY}
  1766. {$IFDEF HAS_SDO_DOUBLE}
  1767. CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1768. {$ENDIF HAS_SDO_DOUBLE}
  1769. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1770. finally
  1771. FreeAndNil(localObj);
  1772. end;
  1773. locVal := 1236547891;
  1774. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1775. try
  1776. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1777. CheckEquals( True, localObj.isSet(), 'isSet' );
  1778. CheckEquals( False, localObj.isNull(), 'isNull' );
  1779. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1780. CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
  1781. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1782. finally
  1783. FreeAndNil(localObj);
  1784. end;
  1785. locVal := -2255442;
  1786. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  1787. try
  1788. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1789. CheckEquals( True, localObj.isSet(), 'isSet' );
  1790. CheckEquals( False, localObj.isNull(), 'isNull' );
  1791. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1792. CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
  1793. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1794. finally
  1795. FreeAndNil(localObj);
  1796. end;
  1797. // multi value
  1798. prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
  1799. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  1800. try
  1801. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1802. CheckEquals( True, localObj.isSet(), 'isSet' );
  1803. CheckEquals( True, localObj.isNull(), 'isNull' );
  1804. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  1805. CheckEquals( 0, localObj.getFloatValue(), 'getFloatValue');
  1806. {$IFDEF HAS_SDO_CURRENCY}
  1807. CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1808. {$ENDIF HAS_SDO_CURRENCY}
  1809. {$IFDEF HAS_SDO_DOUBLE}
  1810. CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1811. {$ENDIF HAS_SDO_DOUBLE}
  1812. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1813. finally
  1814. FreeAndNil(localObj);
  1815. end;
  1816. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  1817. try
  1818. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1819. CheckEquals( False, localObj.isSet(), 'isSet' );
  1820. CheckEquals( True, localObj.isNull(), 'isNull' );
  1821. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  1822. CheckEquals( 0, localObj.getFloatValue(), 'getFloatValue');
  1823. {$IFDEF HAS_SDO_CURRENCY}
  1824. CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1825. {$ENDIF HAS_SDO_CURRENCY}
  1826. {$IFDEF HAS_SDO_DOUBLE}
  1827. CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1828. {$ENDIF HAS_SDO_DOUBLE}
  1829. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1830. finally
  1831. FreeAndNil(localObj);
  1832. end;
  1833. locVal := 99;
  1834. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1835. try
  1836. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1837. CheckEquals( True, localObj.isSet(), 'isSet' );
  1838. CheckEquals( False, localObj.isNull(), 'isNull' );
  1839. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1840. CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
  1841. {$IFDEF HAS_SDO_CURRENCY}
  1842. CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
  1843. {$ENDIF HAS_SDO_CURRENCY}
  1844. {$IFDEF HAS_SDO_DOUBLE}
  1845. CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
  1846. {$ENDIF HAS_SDO_DOUBLE}
  1847. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1848. finally
  1849. FreeAndNil(localObj);
  1850. end;
  1851. locVal := 88552255;
  1852. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1853. try
  1854. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1855. CheckEquals( True, localObj.isSet(), 'isSet' );
  1856. CheckEquals( False, localObj.isNull(), 'isNull' );
  1857. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1858. CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
  1859. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1860. finally
  1861. FreeAndNil(localObj);
  1862. end;
  1863. locVal := -55886624;
  1864. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  1865. try
  1866. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1867. CheckEquals( True, localObj.isSet(), 'isSet' );
  1868. CheckEquals( False, localObj.isNull(), 'isNull' );
  1869. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1870. CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
  1871. CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
  1872. finally
  1873. FreeAndNil(localObj);
  1874. end;
  1875. end;
  1876. {$ENDIF HAS_SDO_FLOAT}
  1877. procedure TValueSetting_Test.create_integer();
  1878. var
  1879. ok : Boolean;
  1880. intVal : TSDOInteger;
  1881. fact : ISDODataFactory;
  1882. objectAType : ISDOType;
  1883. localObj : TValueSetting;
  1884. prp : ISDOProperty;
  1885. begin
  1886. intVal := 1210;
  1887. fact := CreateFactory();
  1888. objectAType := fact.getType(s_uri,s_type_object_A);
  1889. ok := False;
  1890. try
  1891. TValueSetting.Create(False,False,intVal,nil,0);
  1892. except
  1893. on e : ESDOIllegalArgumentException do
  1894. ok := True;
  1895. end;
  1896. CheckEquals(True,ok,'Invalid property parametter');
  1897. // simple value
  1898. prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
  1899. localObj := TValueSetting.Create(True,True,intVal,prp,0);
  1900. try
  1901. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1902. CheckEquals( True, localObj.isSet(), 'isSet' );
  1903. CheckEquals( True, localObj.isNull(), 'isNull' );
  1904. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1905. CheckEquals( 0, localObj.getIntegerValue(), 'getIntegerValue');
  1906. CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1907. CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
  1908. finally
  1909. FreeAndNil(localObj);
  1910. end;
  1911. localObj := TValueSetting.Create(False,True,intVal,prp,0);
  1912. try
  1913. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1914. CheckEquals( False, localObj.isSet(), 'isSet' );
  1915. CheckEquals( True, localObj.isNull(), 'isNull' );
  1916. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1917. CheckEquals( 0, localObj.getIntegerValue(), 'getIntegerValue');
  1918. CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1919. CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
  1920. finally
  1921. FreeAndNil(localObj);
  1922. end;
  1923. localObj := TValueSetting.Create(True,False,intVal,prp,0);
  1924. try
  1925. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1926. CheckEquals( True, localObj.isSet(), 'isSet' );
  1927. CheckEquals( False, localObj.isNull(), 'isNull' );
  1928. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1929. CheckEquals( intVal, localObj.getIntegerValue(), 'getIntegerValue');
  1930. CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1931. CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
  1932. finally
  1933. FreeAndNil(localObj);
  1934. end;
  1935. intVal := 67;
  1936. localObj := TValueSetting.Create(True,False,intVal,prp,0);
  1937. try
  1938. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1939. CheckEquals( True, localObj.isSet(), 'isSet' );
  1940. CheckEquals( False, localObj.isNull(), 'isNull' );
  1941. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  1942. CheckEquals( intVal, localObj.getIntegerValue(), 'getIntegerValue');
  1943. CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1944. CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getByteValue');
  1945. CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
  1946. finally
  1947. FreeAndNil(localObj);
  1948. end;
  1949. // multi value
  1950. prp := objectAType.getProperty(s_integer_propList) as ISDOProperty;
  1951. localObj := TValueSetting.Create(True,True,intVal,prp,12);
  1952. try
  1953. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1954. CheckEquals( True, localObj.isSet(), 'isSet' );
  1955. CheckEquals( True, localObj.isNull(), 'isNull' );
  1956. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  1957. CheckEquals( 0, localObj.getIntegerValue(), 'getIntegerValue');
  1958. CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1959. CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
  1960. finally
  1961. FreeAndNil(localObj);
  1962. end;
  1963. localObj := TValueSetting.Create(False,True,intVal,prp,23);
  1964. try
  1965. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1966. CheckEquals( False, localObj.isSet(), 'isSet' );
  1967. CheckEquals( True, localObj.isNull(), 'isNull' );
  1968. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  1969. CheckEquals( 0, localObj.getIntegerValue(), 'getIntegerValue');
  1970. CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1971. CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
  1972. finally
  1973. FreeAndNil(localObj);
  1974. end;
  1975. intVal := 345;
  1976. localObj := TValueSetting.Create(True,False,intVal,prp,34);
  1977. try
  1978. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  1979. CheckEquals( True, localObj.isSet(), 'isSet' );
  1980. CheckEquals( False, localObj.isNull(), 'isNull' );
  1981. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  1982. CheckEquals( intVal, localObj.getIntegerValue(), 'getIntegerValue');
  1983. CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
  1984. CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
  1985. finally
  1986. FreeAndNil(localObj);
  1987. end;
  1988. end;
  1989. {$IFDEF HAS_SDO_LONG}
  1990. procedure TValueSetting_Test.create_long();
  1991. const
  1992. PROP_NAME = s_long_prop;
  1993. LIST_PROP_NAME = s_long_propList;
  1994. var
  1995. ok : Boolean;
  1996. locVal : TSDOLong;
  1997. fact : ISDODataFactory;
  1998. objectAType : ISDOType;
  1999. localObj : TValueSetting;
  2000. prp : ISDOProperty;
  2001. begin
  2002. locVal := 67;
  2003. fact := CreateFactory();
  2004. objectAType := fact.getType(s_uri,s_type_object_A);
  2005. ok := False;
  2006. try
  2007. TValueSetting.Create(False,False,locVal,nil,0);
  2008. except
  2009. on e : ESDOIllegalArgumentException do
  2010. ok := True;
  2011. end;
  2012. CheckEquals(True,ok,'Invalid property parametter');
  2013. // simple value
  2014. prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
  2015. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  2016. try
  2017. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2018. CheckEquals( True, localObj.isSet(), 'isSet' );
  2019. CheckEquals( True, localObj.isNull(), 'isNull' );
  2020. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2021. CheckEquals( 0, localObj.getLongValue(), 'getLongValue');
  2022. {$IFDEF HAS_SDO_CHAR}
  2023. CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2024. {$ENDIF HAS_SDO_CHAR}
  2025. CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2026. CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
  2027. CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2028. {$IFDEF HAS_SDO_SHORT}
  2029. CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
  2030. {$ENDIF HAS_SDO_SHORT}
  2031. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2032. finally
  2033. FreeAndNil(localObj);
  2034. end;
  2035. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  2036. try
  2037. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2038. CheckEquals( False, localObj.isSet(), 'isSet' );
  2039. CheckEquals( True, localObj.isNull(), 'isNull' );
  2040. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2041. CheckEquals( 0, localObj.getLongValue(), 'getLongValue');
  2042. {$IFDEF HAS_SDO_CHAR}
  2043. CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2044. {$ENDIF HAS_SDO_CHAR}
  2045. CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2046. CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
  2047. CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2048. {$IFDEF HAS_SDO_SHORT}
  2049. CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
  2050. {$ENDIF HAS_SDO_SHORT}
  2051. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2052. finally
  2053. FreeAndNil(localObj);
  2054. end;
  2055. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  2056. try
  2057. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2058. CheckEquals( True, localObj.isSet(), 'isSet' );
  2059. CheckEquals( False, localObj.isNull(), 'isNull' );
  2060. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2061. CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
  2062. {$IFDEF HAS_SDO_CHAR}
  2063. CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2064. {$ENDIF HAS_SDO_CHAR}
  2065. CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2066. CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
  2067. CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2068. {$IFDEF HAS_SDO_SHORT}
  2069. CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
  2070. {$ENDIF HAS_SDO_SHORT}
  2071. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue'); finally
  2072. FreeAndNil(localObj);
  2073. end;
  2074. locVal := 45;
  2075. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  2076. try
  2077. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2078. CheckEquals( True, localObj.isSet(), 'isSet' );
  2079. CheckEquals( False, localObj.isNull(), 'isNull' );
  2080. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2081. CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
  2082. {$IFDEF HAS_SDO_CHAR}
  2083. CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2084. {$ENDIF HAS_SDO_CHAR}
  2085. CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2086. CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
  2087. CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2088. {$IFDEF HAS_SDO_SHORT}
  2089. CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
  2090. {$ENDIF HAS_SDO_SHORT}
  2091. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2092. finally
  2093. FreeAndNil(localObj);
  2094. end;
  2095. locVal := 12365478914782522;
  2096. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  2097. try
  2098. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2099. CheckEquals( True, localObj.isSet(), 'isSet' );
  2100. CheckEquals( False, localObj.isNull(), 'isNull' );
  2101. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2102. CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
  2103. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2104. finally
  2105. FreeAndNil(localObj);
  2106. end;
  2107. locVal := -22554477886221222;
  2108. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  2109. try
  2110. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2111. CheckEquals( True, localObj.isSet(), 'isSet' );
  2112. CheckEquals( False, localObj.isNull(), 'isNull' );
  2113. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2114. CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
  2115. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2116. finally
  2117. FreeAndNil(localObj);
  2118. end;
  2119. // multi value
  2120. prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
  2121. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  2122. try
  2123. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2124. CheckEquals( True, localObj.isSet(), 'isSet' );
  2125. CheckEquals( True, localObj.isNull(), 'isNull' );
  2126. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  2127. CheckEquals( 0, localObj.getLongValue(), 'getLongValue');
  2128. {$IFDEF HAS_SDO_CHAR}
  2129. CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2130. {$ENDIF HAS_SDO_CHAR}
  2131. CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2132. CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
  2133. CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2134. {$IFDEF HAS_SDO_SHORT}
  2135. CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
  2136. {$ENDIF HAS_SDO_SHORT}
  2137. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2138. finally
  2139. FreeAndNil(localObj);
  2140. end;
  2141. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  2142. try
  2143. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2144. CheckEquals( False, localObj.isSet(), 'isSet' );
  2145. CheckEquals( True, localObj.isNull(), 'isNull' );
  2146. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  2147. CheckEquals( 0, localObj.getLongValue(), 'getLongValue');
  2148. {$IFDEF HAS_SDO_CHAR}
  2149. CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2150. {$ENDIF HAS_SDO_CHAR}
  2151. CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2152. CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
  2153. CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2154. {$IFDEF HAS_SDO_SHORT}
  2155. CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
  2156. {$ENDIF HAS_SDO_SHORT}
  2157. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2158. finally
  2159. FreeAndNil(localObj);
  2160. end;
  2161. locVal := 99;
  2162. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  2163. try
  2164. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2165. CheckEquals( True, localObj.isSet(), 'isSet' );
  2166. CheckEquals( False, localObj.isNull(), 'isNull' );
  2167. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  2168. CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
  2169. {$IFDEF HAS_SDO_CHAR}
  2170. CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2171. {$ENDIF HAS_SDO_CHAR}
  2172. CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2173. CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
  2174. CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2175. {$IFDEF HAS_SDO_SHORT}
  2176. CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
  2177. {$ENDIF HAS_SDO_SHORT}
  2178. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2179. finally
  2180. FreeAndNil(localObj);
  2181. end;
  2182. locVal := 88552246677331155;
  2183. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  2184. try
  2185. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2186. CheckEquals( True, localObj.isSet(), 'isSet' );
  2187. CheckEquals( False, localObj.isNull(), 'isNull' );
  2188. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  2189. CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
  2190. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2191. finally
  2192. FreeAndNil(localObj);
  2193. end;
  2194. locVal := -5588663211424;
  2195. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  2196. try
  2197. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2198. CheckEquals( True, localObj.isSet(), 'isSet' );
  2199. CheckEquals( False, localObj.isNull(), 'isNull' );
  2200. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  2201. CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
  2202. CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
  2203. finally
  2204. FreeAndNil(localObj);
  2205. end;
  2206. end;
  2207. {$ENDIF HAS_SDO_LONG}
  2208. {$IFDEF HAS_SDO_SHORT}
  2209. procedure TValueSetting_Test.create_short();
  2210. const
  2211. PROP_NAME = s_short_prop;
  2212. LIST_PROP_NAME = s_short_propList;
  2213. var
  2214. ok : Boolean;
  2215. locVal : TSDOShort;
  2216. fact : ISDODataFactory;
  2217. objectAType : ISDOType;
  2218. localObj : TValueSetting;
  2219. prp : ISDOProperty;
  2220. begin
  2221. locVal := 67;
  2222. fact := CreateFactory();
  2223. objectAType := fact.getType(s_uri,s_type_object_A);
  2224. ok := False;
  2225. try
  2226. TValueSetting.Create(False,False,locVal,nil,0);
  2227. except
  2228. on e : ESDOIllegalArgumentException do
  2229. ok := True;
  2230. end;
  2231. CheckEquals(True,ok,'Invalid property parametter');
  2232. // simple value
  2233. prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
  2234. localObj := TValueSetting.Create(True,True,locVal,prp,0);
  2235. try
  2236. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2237. CheckEquals( True, localObj.isSet(), 'isSet' );
  2238. CheckEquals( True, localObj.isNull(), 'isNull' );
  2239. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2240. CheckEquals( 0, localObj.getShortValue(), 'getShortValue');
  2241. {$IFDEF HAS_SDO_CHAR}
  2242. CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2243. {$ENDIF HAS_SDO_CHAR}
  2244. CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2245. CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
  2246. CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2247. {$IFDEF HAS_SDO_LONG}
  2248. CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
  2249. {$ENDIF HAS_SDO_LONG}
  2250. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2251. finally
  2252. FreeAndNil(localObj);
  2253. end;
  2254. localObj := TValueSetting.Create(False,True,locVal,prp,0);
  2255. try
  2256. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2257. CheckEquals( False, localObj.isSet(), 'isSet' );
  2258. CheckEquals( True, localObj.isNull(), 'isNull' );
  2259. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2260. CheckEquals( 0, localObj.getShortValue(), 'getShortValue');
  2261. {$IFDEF HAS_SDO_CHAR}
  2262. CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2263. {$ENDIF HAS_SDO_CHAR}
  2264. CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2265. CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
  2266. CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2267. {$IFDEF HAS_SDO_LONG}
  2268. CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
  2269. {$ENDIF HAS_SDO_LONG}
  2270. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2271. finally
  2272. FreeAndNil(localObj);
  2273. end;
  2274. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  2275. try
  2276. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2277. CheckEquals( True, localObj.isSet(), 'isSet' );
  2278. CheckEquals( False, localObj.isNull(), 'isNull' );
  2279. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2280. CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
  2281. {$IFDEF HAS_SDO_CHAR}
  2282. CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2283. {$ENDIF HAS_SDO_CHAR}
  2284. CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2285. CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
  2286. CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2287. {$IFDEF HAS_SDO_LONG}
  2288. CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
  2289. {$ENDIF HAS_SDO_LONG}
  2290. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2291. finally
  2292. FreeAndNil(localObj);
  2293. end;
  2294. locVal := 45;
  2295. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  2296. try
  2297. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2298. CheckEquals( True, localObj.isSet(), 'isSet' );
  2299. CheckEquals( False, localObj.isNull(), 'isNull' );
  2300. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2301. CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
  2302. {$IFDEF HAS_SDO_CHAR}
  2303. CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2304. {$ENDIF HAS_SDO_CHAR}
  2305. CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2306. CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
  2307. CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2308. {$IFDEF HAS_SDO_LONG}
  2309. CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
  2310. {$ENDIF HAS_SDO_LONG}
  2311. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2312. finally
  2313. FreeAndNil(localObj);
  2314. end;
  2315. locVal := 23567;
  2316. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  2317. try
  2318. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2319. CheckEquals( True, localObj.isSet(), 'isSet' );
  2320. CheckEquals( False, localObj.isNull(), 'isNull' );
  2321. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2322. CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
  2323. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2324. finally
  2325. FreeAndNil(localObj);
  2326. end;
  2327. locVal := -22552;
  2328. localObj := TValueSetting.Create(True,False,locVal,prp,0);
  2329. try
  2330. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2331. CheckEquals( True, localObj.isSet(), 'isSet' );
  2332. CheckEquals( False, localObj.isNull(), 'isNull' );
  2333. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2334. CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
  2335. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2336. finally
  2337. FreeAndNil(localObj);
  2338. end;
  2339. // multi value
  2340. prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
  2341. localObj := TValueSetting.Create(True,True,locVal,prp,12);
  2342. try
  2343. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2344. CheckEquals( True, localObj.isSet(), 'isSet' );
  2345. CheckEquals( True, localObj.isNull(), 'isNull' );
  2346. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  2347. CheckEquals( 0, localObj.getShortValue(), 'getShortValue');
  2348. {$IFDEF HAS_SDO_CHAR}
  2349. CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2350. {$ENDIF HAS_SDO_CHAR}
  2351. CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2352. CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
  2353. CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2354. {$IFDEF HAS_SDO_LONG}
  2355. CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
  2356. {$ENDIF HAS_SDO_LONG}
  2357. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2358. finally
  2359. FreeAndNil(localObj);
  2360. end;
  2361. localObj := TValueSetting.Create(False,True,locVal,prp,23);
  2362. try
  2363. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2364. CheckEquals( False, localObj.isSet(), 'isSet' );
  2365. CheckEquals( True, localObj.isNull(), 'isNull' );
  2366. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  2367. CheckEquals( 0, localObj.getShortValue(), 'getShortValue');
  2368. {$IFDEF HAS_SDO_CHAR}
  2369. CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2370. {$ENDIF HAS_SDO_CHAR}
  2371. CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2372. CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
  2373. CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2374. {$IFDEF HAS_SDO_LONG}
  2375. CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
  2376. {$ENDIF HAS_SDO_LONG}
  2377. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2378. finally
  2379. FreeAndNil(localObj);
  2380. end;
  2381. locVal := 99;
  2382. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  2383. try
  2384. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2385. CheckEquals( True, localObj.isSet(), 'isSet' );
  2386. CheckEquals( False, localObj.isNull(), 'isNull' );
  2387. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  2388. CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
  2389. {$IFDEF HAS_SDO_CHAR}
  2390. CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
  2391. {$ENDIF HAS_SDO_CHAR}
  2392. CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
  2393. CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
  2394. CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
  2395. {$IFDEF HAS_SDO_LONG}
  2396. CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
  2397. {$ENDIF HAS_SDO_LONG}
  2398. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2399. finally
  2400. FreeAndNil(localObj);
  2401. end;
  2402. locVal := 8855;
  2403. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  2404. try
  2405. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2406. CheckEquals( True, localObj.isSet(), 'isSet' );
  2407. CheckEquals( False, localObj.isNull(), 'isNull' );
  2408. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  2409. CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
  2410. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2411. finally
  2412. FreeAndNil(localObj);
  2413. end;
  2414. locVal := -11424;
  2415. localObj := TValueSetting.Create(True,False,locVal,prp,34);
  2416. try
  2417. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2418. CheckEquals( True, localObj.isSet(), 'isSet' );
  2419. CheckEquals( False, localObj.isNull(), 'isNull' );
  2420. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  2421. CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
  2422. CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
  2423. finally
  2424. FreeAndNil(localObj);
  2425. end;
  2426. end;
  2427. {$ENDIF HAS_SDO_SHORT}
  2428. procedure TValueSetting_Test.create_string();
  2429. var
  2430. ok : Boolean;
  2431. strVal : TSDOString;
  2432. fact : ISDODataFactory;
  2433. objectAType : ISDOType;
  2434. localObj : TValueSetting;
  2435. prp : ISDOProperty;
  2436. begin
  2437. strVal := 'sdo sample string';
  2438. fact := CreateFactory();
  2439. objectAType := fact.getType(s_uri,s_type_object_A);
  2440. ok := False;
  2441. try
  2442. TValueSetting.Create(False,False,strVal,nil,0);
  2443. except
  2444. on e : ESDOIllegalArgumentException do
  2445. ok := True;
  2446. end;
  2447. CheckEquals(True,ok,'Invalid property parametter');
  2448. // simple value
  2449. prp := objectAType.getProperty(s_string_prop) as ISDOProperty;
  2450. localObj := TValueSetting.Create(True,True,strVal,prp,0);
  2451. try
  2452. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2453. CheckEquals( True, localObj.isSet(), 'isSet' );
  2454. CheckEquals( True, localObj.isNull(), 'isNull' );
  2455. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2456. CheckEquals( '', localObj.getStringValue(), 'getStringValue');
  2457. finally
  2458. FreeAndNil(localObj);
  2459. end;
  2460. localObj := TValueSetting.Create(False,True,strVal,prp,0);
  2461. try
  2462. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2463. CheckEquals( False, localObj.isSet(), 'isSet' );
  2464. CheckEquals( True, localObj.isNull(), 'isNull' );
  2465. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2466. CheckEquals( '', localObj.getStringValue(), 'getStringValue');
  2467. finally
  2468. FreeAndNil(localObj);
  2469. end;
  2470. localObj := TValueSetting.Create(True,False,strVal,prp,0);
  2471. try
  2472. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2473. CheckEquals( True, localObj.isSet(), 'isSet' );
  2474. CheckEquals( False, localObj.isNull(), 'isNull' );
  2475. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2476. CheckEquals( strVal, localObj.getStringValue(), 'getStringValue');
  2477. finally
  2478. FreeAndNil(localObj);
  2479. end;
  2480. strVal := '123';
  2481. localObj := TValueSetting.Create(True,False,strVal,prp,0);
  2482. try
  2483. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2484. CheckEquals( True, localObj.isSet(), 'isSet' );
  2485. CheckEquals( False, localObj.isNull(), 'isNull' );
  2486. CheckEquals( 0, localObj.getIndex(), 'getIndex' );
  2487. CheckEquals( strVal, localObj.getStringValue(), 'getStringValue');
  2488. CheckEquals( TSDOConvertHelper.StringToByte(localObj.getStringValue()), localObj.getByteValue(), 'getByteValue');
  2489. CheckEquals( TSDOConvertHelper.StringToInteger(localObj.getStringValue()), localObj.getIntegerValue(), 'getIntegerValue');
  2490. {$IFDEF HAS_SDO_BYTES}
  2491. CheckEquals( TSDOConvertHelper.StringToBytes(localObj.getStringValue()), localObj.getBytesValue(), 'getBytesValue');
  2492. {$ENDIF HAS_SDO_BYTES}
  2493. finally
  2494. FreeAndNil(localObj);
  2495. end;
  2496. // multi value
  2497. prp := objectAType.getProperty(s_string_propList) as ISDOProperty;
  2498. localObj := TValueSetting.Create(True,True,strVal,prp,12);
  2499. try
  2500. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2501. CheckEquals( True, localObj.isSet(), 'isSet' );
  2502. CheckEquals( True, localObj.isNull(), 'isNull' );
  2503. CheckEquals( 12, localObj.getIndex(), 'getIndex' );
  2504. CheckEquals( '', localObj.getStringValue(), 'getStringValue');
  2505. finally
  2506. FreeAndNil(localObj);
  2507. end;
  2508. localObj := TValueSetting.Create(False,True,strVal,prp,23);
  2509. try
  2510. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2511. CheckEquals( False, localObj.isSet(), 'isSet' );
  2512. CheckEquals( True, localObj.isNull(), 'isNull' );
  2513. CheckEquals( 23, localObj.getIndex(), 'getIndex' );
  2514. CheckEquals( '', localObj.getStringValue(), 'getStringValue');
  2515. finally
  2516. FreeAndNil(localObj);
  2517. end;
  2518. localObj := TValueSetting.Create(True,False,strVal,prp,34);
  2519. try
  2520. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2521. CheckEquals( True, localObj.isSet(), 'isSet' );
  2522. CheckEquals( False, localObj.isNull(), 'isNull' );
  2523. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  2524. CheckEquals( strVal, localObj.getStringValue(), 'getStringValue');
  2525. finally
  2526. FreeAndNil(localObj);
  2527. end;
  2528. strVal := 'qwsdff';
  2529. localObj := TValueSetting.Create(True,False,strVal,prp,34);
  2530. try
  2531. CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
  2532. CheckEquals( True, localObj.isSet(), 'isSet' );
  2533. CheckEquals( False, localObj.isNull(), 'isNull' );
  2534. CheckEquals( 34, localObj.getIndex(), 'getIndex' );
  2535. CheckEquals( strVal, localObj.getStringValue(), 'getStringValue');
  2536. finally
  2537. FreeAndNil(localObj);
  2538. end;
  2539. end;
  2540. { TSDOSettingList_Test }
  2541. procedure TSDOSettingList_Test.append();
  2542. var
  2543. ok : Boolean;
  2544. intVal : TSDOInteger;
  2545. fact : ISDODataFactory;
  2546. objectAType : ISDOType;
  2547. stg0, stg1, stg2, stg3 : TValueSetting;
  2548. localObj : ISDOSettingList;
  2549. prp : ISDOProperty;
  2550. begin
  2551. intVal := 1210;
  2552. fact := CreateFactory();
  2553. objectAType := fact.getType(s_uri,s_type_object_A);
  2554. prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
  2555. localObj := TSDOSettingList.Create();
  2556. ok := False;
  2557. try
  2558. localObj.append(nil);
  2559. except
  2560. on e : ESDOIllegalArgumentException do
  2561. ok := True;
  2562. end;
  2563. CheckEquals(True,ok,'append(0,nil)');
  2564. stg0 := TValueSetting.Create(True,False,intVal,prp,0);
  2565. localObj.append(stg0);
  2566. CheckEquals(1,localObj.size());
  2567. CheckSame(stg0,localObj.getItem(0));
  2568. localObj.append(stg0);
  2569. CheckEquals(1,localObj.size(),'appended twice');
  2570. CheckSame(stg0,localObj.getItem(0),'appended twice');
  2571. stg1 := TValueSetting.Create(True,False,intVal,prp,0);
  2572. localObj.append(stg1);
  2573. CheckEquals(2,localObj.size());
  2574. CheckSame(stg0,localObj.getItem(0));
  2575. CheckSame(stg1,localObj.getItem(1));
  2576. stg2 := TValueSetting.Create(True,False,intVal,prp,0);
  2577. localObj.append(stg2);
  2578. CheckEquals(3,localObj.size());
  2579. CheckSame(stg0,localObj.getItem(0));
  2580. CheckSame(stg1,localObj.getItem(1));
  2581. CheckSame(stg2,localObj.getItem(2));
  2582. localObj.append(stg2);
  2583. CheckEquals(3,localObj.size(),'appended twice');
  2584. CheckSame(stg0,localObj.getItem(0),'appended twice');
  2585. CheckSame(stg1,localObj.getItem(1),'appended twice');
  2586. CheckSame(stg2,localObj.getItem(2),'appended twice');
  2587. stg3 := TValueSetting.Create(True,False,intVal,prp,0);
  2588. localObj.append(stg3);
  2589. CheckEquals(4,localObj.size());
  2590. CheckSame(stg0,localObj.getItem(0));
  2591. CheckSame(stg1,localObj.getItem(1));
  2592. CheckSame(stg2,localObj.getItem(2));
  2593. CheckSame(stg3,localObj.getItem(3));
  2594. end;
  2595. class function TSDOSettingList_Test.CreateFactory() : ISDODataFactory;
  2596. var
  2597. locFactory : ISDODataFactory;
  2598. procedure Add_ObjectA(const AUri : string);
  2599. var
  2600. locObj : ISDOType;
  2601. begin
  2602. locFactory.AddType(AUri,s_type_object_A,[]);
  2603. locObj := locFactory.getType(AUri,s_type_object_A);
  2604. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  2605. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  2606. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  2607. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  2608. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2609. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  2610. end;
  2611. begin
  2612. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2613. Add_ObjectA(s_uri);
  2614. Result := locFactory;
  2615. end;
  2616. procedure TSDOSettingList_Test.getItem();
  2617. var
  2618. ok : Boolean;
  2619. intVal : TSDOInteger;
  2620. fact : ISDODataFactory;
  2621. objectAType : ISDOType;
  2622. stg0, stg1, stg2, stg3 : TValueSetting;
  2623. localObj : ISDOSettingList;
  2624. prp : ISDOProperty;
  2625. begin
  2626. intVal := 1210;
  2627. fact := CreateFactory();
  2628. objectAType := fact.getType(s_uri,s_type_object_A);
  2629. prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
  2630. localObj := TSDOSettingList.Create();
  2631. ok := False;
  2632. try
  2633. localObj.getItem(0);
  2634. except
  2635. on e : ESDOIndexOutOfRangeException do
  2636. ok := True;
  2637. end;
  2638. CheckEquals(True,ok,'getItem(0,nil)');
  2639. stg0 := TValueSetting.Create(True,False,intVal,prp,0);
  2640. localObj.insert(0,stg0);
  2641. CheckEquals(1,localObj.size());
  2642. CheckSame(stg0,localObj.getItem(0));
  2643. stg1 := TValueSetting.Create(True,False,intVal,prp,0);
  2644. localObj.insert(0,stg1);
  2645. CheckEquals(2,localObj.size());
  2646. CheckSame(stg0,localObj.getItem(1));
  2647. CheckSame(stg1,localObj.getItem(0));
  2648. stg2 := TValueSetting.Create(True,False,intVal,prp,0);
  2649. localObj.insert(1,stg2);
  2650. CheckEquals(3,localObj.size());
  2651. CheckSame(stg0,localObj.getItem(2));
  2652. CheckSame(stg1,localObj.getItem(0));
  2653. CheckSame(stg2,localObj.getItem(1));
  2654. stg3 := TValueSetting.Create(True,False,intVal,prp,0);
  2655. localObj.insert((localObj.size() - 1),stg3);
  2656. CheckEquals(4,localObj.size());
  2657. CheckSame(stg0,localObj.getItem(3));
  2658. CheckSame(stg1,localObj.getItem(0));
  2659. CheckSame(stg2,localObj.getItem(1));
  2660. CheckSame(stg3,localObj.getItem(2));
  2661. localObj.remove(0);
  2662. CheckSame(stg0,localObj.getItem(2));
  2663. CheckSame(stg2,localObj.getItem(0));
  2664. CheckSame(stg3,localObj.getItem(1));
  2665. localObj.remove(2);
  2666. CheckSame(stg2,localObj.getItem(0));
  2667. CheckSame(stg3,localObj.getItem(1));
  2668. stg0 := TValueSetting.Create(True,False,intVal,prp,0);
  2669. localObj.append(stg0);
  2670. CheckSame(stg2,localObj.getItem(0));
  2671. CheckSame(stg3,localObj.getItem(1));
  2672. CheckSame(stg0,localObj.getItem(2));
  2673. localObj.remove(1);
  2674. CheckSame(stg2,localObj.getItem(0));
  2675. CheckSame(stg0,localObj.getItem(1));
  2676. localObj.remove(1);
  2677. localObj.remove(0);
  2678. ok := False;
  2679. try
  2680. localObj.getItem(0);
  2681. except
  2682. on e : ESDOIndexOutOfRangeException do
  2683. ok := True;
  2684. end;
  2685. CheckEquals(True,ok,'getItem(0,nil)');
  2686. end;
  2687. procedure TSDOSettingList_Test.insert();
  2688. var
  2689. ok : Boolean;
  2690. intVal : TSDOInteger;
  2691. fact : ISDODataFactory;
  2692. objectAType : ISDOType;
  2693. stg0, stg1, stg2, stg3 : TValueSetting;
  2694. localObj : ISDOSettingList;
  2695. prp : ISDOProperty;
  2696. begin
  2697. intVal := 1210;
  2698. fact := CreateFactory();
  2699. objectAType := fact.getType(s_uri,s_type_object_A);
  2700. prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
  2701. localObj := TSDOSettingList.Create();
  2702. ok := False;
  2703. try
  2704. localObj.insert(0,nil);
  2705. except
  2706. on e : ESDOIllegalArgumentException do
  2707. ok := True;
  2708. end;
  2709. CheckEquals(True,ok,'insert(0,nil)');
  2710. stg0 := TValueSetting.Create(True,False,intVal,prp,0);
  2711. localObj.insert(0,stg0);
  2712. CheckEquals(1,localObj.size());
  2713. CheckSame(stg0,localObj.getItem(0));
  2714. localObj.insert(0,stg0);
  2715. CheckEquals(1,localObj.size(),'inserted twice');
  2716. CheckSame(stg0,localObj.getItem(0),'inserted twice');
  2717. stg1 := TValueSetting.Create(True,False,intVal,prp,0);
  2718. localObj.insert(0,stg1);
  2719. CheckEquals(2,localObj.size());
  2720. CheckSame(stg0,localObj.getItem(1));
  2721. CheckSame(stg1,localObj.getItem(0));
  2722. stg2 := TValueSetting.Create(True,False,intVal,prp,0);
  2723. localObj.insert(1,stg2);
  2724. CheckEquals(3,localObj.size());
  2725. CheckSame(stg0,localObj.getItem(2));
  2726. CheckSame(stg1,localObj.getItem(0));
  2727. CheckSame(stg2,localObj.getItem(1));
  2728. localObj.insert(1,stg2);
  2729. CheckEquals(3,localObj.size(),'inserted twice');
  2730. CheckSame(stg0,localObj.getItem(2),'inserted twice');
  2731. CheckSame(stg1,localObj.getItem(0),'inserted twice');
  2732. CheckSame(stg2,localObj.getItem(1),'inserted twice');
  2733. stg3 := TValueSetting.Create(True,False,intVal,prp,0);
  2734. localObj.insert((localObj.size() - 1),stg3);
  2735. CheckEquals(4,localObj.size());
  2736. CheckSame(stg0,localObj.getItem(3));
  2737. CheckSame(stg1,localObj.getItem(0));
  2738. CheckSame(stg2,localObj.getItem(1));
  2739. CheckSame(stg3,localObj.getItem(2));
  2740. end;
  2741. procedure TSDOSettingList_Test.remove();
  2742. var
  2743. ok : Boolean;
  2744. intVal : TSDOInteger;
  2745. fact : ISDODataFactory;
  2746. objectAType : ISDOType;
  2747. stg0, stg1 : TValueSetting;
  2748. localObj : ISDOSettingList;
  2749. prp : ISDOProperty;
  2750. begin
  2751. intVal := 1210;
  2752. fact := CreateFactory();
  2753. objectAType := fact.getType(s_uri,s_type_object_A);
  2754. prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
  2755. localObj := TSDOSettingList.Create();
  2756. ok := False;
  2757. try
  2758. localObj.remove(0);
  2759. except
  2760. on e : ESDOIndexOutOfRangeException do
  2761. ok := True;
  2762. end;
  2763. CheckEquals(True,ok,'remove(0,nil)');
  2764. stg0 := TValueSetting.Create(True,False,intVal,prp,0);
  2765. localObj.append(stg0);
  2766. ok := False;
  2767. try
  2768. localObj.remove(1);
  2769. except
  2770. on e : ESDOIndexOutOfRangeException do
  2771. ok := True;
  2772. end;
  2773. CheckEquals(True,ok,'remove(1,nil)');
  2774. localObj.remove(0);
  2775. CheckEquals(0,localObj.size());
  2776. ok := False;
  2777. try
  2778. localObj.remove(0);
  2779. except
  2780. on e : ESDOIndexOutOfRangeException do
  2781. ok := True;
  2782. end;
  2783. CheckEquals(True,ok,'remove(0,nil)');
  2784. stg0 := TValueSetting.Create(True,False,intVal,prp,0);
  2785. localObj.append(stg0);
  2786. stg1 := TValueSetting.Create(True,False,intVal,prp,0);
  2787. localObj.append(stg1);
  2788. ok := False;
  2789. try
  2790. localObj.remove(2);
  2791. except
  2792. on e : ESDOIndexOutOfRangeException do
  2793. ok := True;
  2794. end;
  2795. CheckEquals(True,ok,'remove(2,nil)');
  2796. localObj.remove(1);
  2797. CheckSame(stg0,localObj.getItem(0));
  2798. stg1 := TValueSetting.Create(True,False,intVal,prp,0);
  2799. localObj.append(stg1);
  2800. CheckSame(stg0,localObj.getItem(0));
  2801. CheckSame(stg1,localObj.getItem(1));
  2802. localObj.remove(0);
  2803. localObj.remove(0);
  2804. CheckEquals(0,localObj.size());
  2805. end;
  2806. procedure TSDOSettingList_Test.size();
  2807. var
  2808. intVal : TSDOInteger;
  2809. fact : ISDODataFactory;
  2810. objectAType : ISDOType;
  2811. stg : TValueSetting;
  2812. localObj : ISDOSettingList;
  2813. prp : ISDOProperty;
  2814. begin
  2815. intVal := 1210;
  2816. fact := CreateFactory();
  2817. objectAType := fact.getType(s_uri,s_type_object_A);
  2818. prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
  2819. localObj := TSDOSettingList.Create();
  2820. CheckEquals(0,localObj.size());
  2821. CheckEquals(0,localObj.size());
  2822. stg := TValueSetting.Create(True,False,intVal,prp,0);
  2823. localObj.append(stg);
  2824. CheckEquals(1,localObj.size());
  2825. stg := TValueSetting.Create(True,False,intVal,prp,0);
  2826. localObj.append(stg);
  2827. CheckEquals(2,localObj.size());
  2828. localObj.remove(1);
  2829. CheckEquals(1,localObj.size());
  2830. localObj.remove(0);
  2831. CheckEquals(0,localObj.size());
  2832. stg := TValueSetting.Create(True,False,intVal,prp,0);
  2833. localObj.insert(0,stg);
  2834. CheckEquals(1,localObj.size());
  2835. stg := TValueSetting.Create(True,False,intVal,prp,0);
  2836. localObj.insert(0,stg);
  2837. CheckEquals(2,localObj.size());
  2838. end;
  2839. { TDicho_Test }
  2840. (*
  2841. procedure TDicho_Test.build();
  2842. var
  2843. ls : TObjectList;
  2844. NBR, i, j, k : PtrInt;
  2845. msg, order : string;
  2846. begin
  2847. j := 0;
  2848. Randomize();
  2849. NBR := RandomRange(100,500);
  2850. ls := TObjectList.Create(False);
  2851. try
  2852. order := '';
  2853. for i := 1 to NBR do begin
  2854. while True do begin
  2855. j := RandomRange(0,1000);
  2856. if ( ls.IndexOf(TObject(j)) = -1 ) then
  2857. Break;
  2858. end;
  2859. CheckEquals(False,findDicho(ls,j,k,@CastExtractor));
  2860. ls.Insert(k,TObject(j));
  2861. order := order + ';' + IntToStr(j);
  2862. end;
  2863. for i := 1 to Pred(NBR) do begin
  2864. if ( PtrInt(ls[i-1]) > PtrInt(ls[i]) ) then begin
  2865. msg := '';
  2866. for j := 0 to Pred(NBR) do begin
  2867. if (j > 0) then
  2868. msg := msg + '; ';
  2869. msg := Format('%sls[%d] = %d',[msg,j,PtrInt(ls[j])]);
  2870. end;
  2871. Check(False,msg + ' ; Order = ' + order);
  2872. end;
  2873. {Check(
  2874. PtrInt(ls[i-1]) < PtrInt(ls[i]),
  2875. Format('i = %d; ls[i] = %d; ls[i-1] = %d',[i, PtrInt(ls[i]), PtrInt(ls[i-1])])
  2876. );}
  2877. end;
  2878. finally
  2879. ls.Free();
  2880. end;
  2881. end;
  2882. procedure TDicho_Test.find();
  2883. var
  2884. offset, value, index, lngth, i : PtrInt;
  2885. passed : Boolean;
  2886. v : TObjectList;
  2887. begin
  2888. v := TObjectList.Create(False);
  2889. try
  2890. for offset := 1 to 5 do begin
  2891. for lngth := 1 to 2049 do begin
  2892. v.Clear();
  2893. v.Capacity := lngth;
  2894. for i := 0 to Pred(lngth) do begin
  2895. v.Add(TObject(i*offset));
  2896. end;
  2897. for value := 0 to Pred(lngth) do begin
  2898. passed := findDicho(v,value*offset,index,@CastExtractor);
  2899. passed := passed and ( index = value );
  2900. CheckEquals(True,passed);
  2901. end;
  2902. end;
  2903. end;
  2904. finally
  2905. v.Free();
  2906. end;
  2907. end; *)
  2908. { TSDOChangedDataObjectList_Test }
  2909. procedure TSDOChangedDataObjectList_Test.append();
  2910. var
  2911. localObj : ISDOChangedDataObjectListEx;
  2912. fact : ISDODataFactory;
  2913. i, j, k : PtrInt;
  2914. il(*, ilSorted*) : IInterfaceList;
  2915. obj : ISDODataObject;
  2916. ct : TChangeType;
  2917. ok : Boolean;
  2918. NBR_INST : PtrInt;
  2919. begin
  2920. k := 0;
  2921. Randomize();
  2922. NBR_INST := RandomRange(100,1000);
  2923. fact := CreateFactory();
  2924. il := TInterfaceList.Create();
  2925. localObj := CreateObject();
  2926. for i := 0 to Pred(NBR_INST) do begin
  2927. ct := TChangeType( ( i mod 3 ) + 1 );
  2928. obj := fact.createNew(s_uri,s_type_object_A);
  2929. localObj.append(obj,ct);
  2930. il.Add(obj);
  2931. end;
  2932. {// The list is no longer sorted!
  2933. ilSorted := SortInterfaceList(il);
  2934. for i := 0 to Pred(NBR_INST) do begin
  2935. CheckEquals(PtrInt(ilSorted[i]),PtrInt(localObj.getDataObject(Pred(NBR_INST) - i)));
  2936. end; }
  2937. for i := 0 to Pred(NBR_INST) do begin
  2938. ok := False;
  2939. for j := 0 to Pred(NBR_INST) do begin
  2940. if ( il[i] = localObj.getDataObject(j) ) then begin
  2941. k := j;
  2942. ok := True;
  2943. Break;
  2944. end;
  2945. end;
  2946. CheckEquals(True, ok, 'getDataObject');
  2947. CheckEquals(PtrInt(TChangeType( ( i mod 3 ) + 1 )), PtrInt(Ord(localObj.getType(k))), 'getType()');
  2948. end;
  2949. for i := 0 to Pred(NBR_INST) do begin
  2950. obj := localObj.getDataObject(i);
  2951. ok := False;
  2952. try
  2953. localObj.append(obj,ctCreate);
  2954. except
  2955. on e : ESDODuplicatedItemException do
  2956. ok := True;
  2957. end;
  2958. CheckEquals(True,ok,Format('Duplicated item, i = %d',[i]));
  2959. ok := False;
  2960. try
  2961. localObj.append(obj,ctChange);
  2962. except
  2963. on e : ESDODuplicatedItemException do
  2964. ok := True;
  2965. end;
  2966. CheckEquals(True,ok,Format('Duplicated item, i = %d',[i]));
  2967. ok := False;
  2968. try
  2969. localObj.append(obj,ctDelete);
  2970. except
  2971. on e : ESDODuplicatedItemException do
  2972. ok := True;
  2973. end;
  2974. CheckEquals(True,ok,Format('Duplicated item, i = %d',[i]));
  2975. end;
  2976. { The list is no longer sorted!
  2977. for i := 0 to Pred(NBR_INST - 1) do begin
  2978. obj := localObj.getDataObject(i);
  2979. CheckEquals(True,PtrInt(obj) < PtrInt(localObj.getDataObject(i+1)));
  2980. end;
  2981. for i := ( 0 + 1 ) to Pred(NBR_INST) do begin
  2982. obj := localObj.getDataObject(i);
  2983. CheckEquals(True,PtrInt(obj) > PtrInt(localObj.getDataObject(i-1)));
  2984. end;}
  2985. end;
  2986. class function TSDOChangedDataObjectList_Test.CreateFactory() : ISDODataFactory;
  2987. var
  2988. locFactory : ISDODataFactory;
  2989. procedure Add_ObjectA(const AUri : string);
  2990. var
  2991. locObj : ISDOType;
  2992. begin
  2993. locFactory.AddType(AUri,s_type_object_A,[]);
  2994. locObj := locFactory.getType(AUri,s_type_object_A);
  2995. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  2996. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  2997. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  2998. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  2999. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  3000. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  3001. end;
  3002. begin
  3003. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3004. Add_ObjectA(s_uri);
  3005. Result := locFactory;
  3006. end;
  3007. class function TSDOChangedDataObjectList_Test.CreateObject() : ISDOChangedDataObjectListEx;
  3008. begin
  3009. Result := TSDOChangedDataObjectList.Create();
  3010. end;
  3011. procedure TSDOChangedDataObjectList_Test.find();
  3012. var
  3013. localObj : ISDOChangedDataObjectListEx;
  3014. fact : ISDODataFactory;
  3015. i, j : PtrInt;
  3016. il: IInterfaceList;
  3017. obj : ISDODataObject;
  3018. NBR_INST : PtrInt;
  3019. begin
  3020. Randomize();
  3021. NBR_INST := RandomRange(100,1000);
  3022. fact := CreateFactory();
  3023. il := TInterfaceList.Create();
  3024. localObj := CreateObject();
  3025. for i := 0 to Pred(NBR_INST) do begin
  3026. obj := fact.createNew(s_uri,s_type_object_A);
  3027. localObj.append(obj,TChangeType( ( i mod 3 ) + 1 ));
  3028. il.Add(obj);
  3029. end;
  3030. for i := 0 to Pred(NBR_INST) do begin
  3031. CheckEquals(True,localObj.find(il[i] as ISDODataObject,j));
  3032. Check(j >= 0);
  3033. Check(j < NBR_INST);
  3034. end;
  3035. end;
  3036. procedure TSDOChangedDataObjectList_Test.size();
  3037. var
  3038. localObj : ISDOChangedDataObjectListEx;
  3039. fact : ISDODataFactory;
  3040. il : IInterfaceList;
  3041. begin
  3042. fact := CreateFactory();
  3043. localObj := CreateObject();
  3044. CheckEquals(0,localObj.size());
  3045. CheckEquals(0,localObj.size());
  3046. il := TInterfaceList.Create();
  3047. il.Add(fact.createNew(s_uri,s_type_object_A));
  3048. localObj.append(il[il.Count - 1] as ISDODataObject,ctDelete);
  3049. CheckEquals(1,localObj.size());
  3050. il.Add(fact.createNew(s_uri,s_type_object_A));
  3051. localObj.append(il[il.Count - 1] as ISDODataObject,ctCreate);
  3052. CheckEquals(2,localObj.size());
  3053. il.Add(fact.createNew(s_uri,s_type_object_A));
  3054. localObj.append(il[il.Count - 1] as ISDODataObject,ctChange);
  3055. CheckEquals(3,localObj.size());
  3056. end;
  3057. { TChangeRecorder_Test }
  3058. procedure TChangeRecorder_Test.bool_change();
  3059. const
  3060. LOCAL_PROP = s_bool_prop;
  3061. var
  3062. locObj : ISDODataObject;
  3063. begin
  3064. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3065. record_bool(locObj,LOCAL_PROP);
  3066. InitRecorder();
  3067. locObj.setBoolean(LOCAL_PROP,False);
  3068. record_bool(locObj,LOCAL_PROP);
  3069. InitRecorder();
  3070. locObj.setBoolean(LOCAL_PROP,True);
  3071. record_bool(locObj,LOCAL_PROP);
  3072. InitRecorder();
  3073. locObj.setNull(LOCAL_PROP);
  3074. record_bool(locObj,LOCAL_PROP);
  3075. InitRecorder();
  3076. locObj.setBoolean(LOCAL_PROP,False);
  3077. record_bool(locObj,LOCAL_PROP);
  3078. InitRecorder();
  3079. locObj.unset(LOCAL_PROP);
  3080. record_bool(locObj,LOCAL_PROP);
  3081. end;
  3082. procedure TChangeRecorder_Test.byte_change();
  3083. const
  3084. LOCAL_PROP = s_byte_prop;
  3085. var
  3086. locObj : ISDODataObject;
  3087. begin
  3088. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3089. record_byte(locObj,LOCAL_PROP);
  3090. InitRecorder();
  3091. locObj.setByte(LOCAL_PROP,123);
  3092. record_byte(locObj,LOCAL_PROP);
  3093. InitRecorder();
  3094. locObj.setByte(LOCAL_PROP,76);
  3095. record_byte(locObj,LOCAL_PROP);
  3096. InitRecorder();
  3097. locObj.setNull(LOCAL_PROP);
  3098. record_byte(locObj,LOCAL_PROP);
  3099. InitRecorder();
  3100. locObj.setByte(LOCAL_PROP,123);
  3101. record_byte(locObj,LOCAL_PROP);
  3102. InitRecorder();
  3103. locObj.unset(LOCAL_PROP);
  3104. record_byte(locObj,LOCAL_PROP);
  3105. end;
  3106. procedure TChangeRecorder_Test.CheckEquals(expected, actual: TSDODate;
  3107. msg: string; const AStrict: Boolean);
  3108. var
  3109. e, a : TDateTime;
  3110. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  3111. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  3112. begin
  3113. if AStrict then begin
  3114. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  3115. end else begin
  3116. e := NormalizeToUTC(expected);
  3117. a := NormalizeToUTC(actual);
  3118. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  3119. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  3120. CheckEquals(e_y,a_y,msg);
  3121. CheckEquals(e_m,a_m,msg);
  3122. CheckEquals(e_d,a_d,msg);
  3123. CheckEquals(e_h,a_h,msg);
  3124. CheckEquals(e_mn,a_mn,msg);
  3125. CheckEquals(e_ss,a_ss,msg);
  3126. CheckEquals(e_ms,a_ms,msg);
  3127. end;
  3128. end;
  3129. function TChangeRecorder_Test.CreateRecorder() : TChangeRecorder;
  3130. var
  3131. ls : ISDOChangedDataObjectList;
  3132. begin
  3133. ls := TSDOChangedDataObjectList.Create();
  3134. FChangeSummary := TSDOChangeSummary.Create(ls);
  3135. Result := TChangeRecorder.Create(ls, FChangeSummary);
  3136. end;
  3137. function IndexOf(const AObject : ISDODataObject; const AList : ISDOChangedDataObjectList) : PtrInt;
  3138. var
  3139. i : PtrInt;
  3140. begin
  3141. Result := -1;
  3142. for i := 0 to Pred(AList.size()) do begin
  3143. if ( AList.getDataObject(i) = AObject ) then begin
  3144. Result := i;
  3145. Break;
  3146. end;
  3147. end;
  3148. end;
  3149. class function TChangeRecorder_Test.Create_Factory() : ISDODataFactory;
  3150. var
  3151. locFactory : ISDODataFactory;
  3152. procedure Add_ObjectA(const AUri : string);
  3153. var
  3154. locObj : ISDOType;
  3155. begin
  3156. locFactory.AddType(AUri,s_type_object_A,[]);
  3157. locFactory.AddType(AUri,s_type_object_B,[]);
  3158. locFactory.AddType(AUri,s_type_object_C,[]);
  3159. locObj := locFactory.getType(AUri,s_type_object_A);
  3160. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  3161. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  3162. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  3163. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  3164. {$IFDEF HAS_SDO_BYTES}
  3165. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  3166. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  3167. {$ENDIF HAS_SDO_BYTES}
  3168. {$IFDEF HAS_SDO_CHAR}
  3169. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  3170. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  3171. {$ENDIF HAS_SDO_CHAR}
  3172. {$IFDEF HAS_SDO_CURRENCY}
  3173. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  3174. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  3175. {$ENDIF HAS_SDO_CURRENCY}
  3176. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  3177. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  3178. {$IFDEF HAS_SDO_DOUBLE}
  3179. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  3180. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  3181. {$ENDIF HAS_SDO_DOUBLE}
  3182. {$IFDEF HAS_SDO_FLOAT}
  3183. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  3184. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  3185. {$ENDIF HAS_SDO_FLOAT}
  3186. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  3187. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  3188. {$IFDEF HAS_SDO_LONG}
  3189. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  3190. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  3191. {$ENDIF HAS_SDO_LONG}
  3192. {$IFDEF HAS_SDO_SHORT}
  3193. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  3194. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  3195. {$ENDIF HAS_SDO_SHORT}
  3196. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  3197. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  3198. locFactory.addProperty(locObj,s_object_prop,AUri,s_type_object_B,[pfIsContainment]);
  3199. locFactory.addProperty(locObj,s_object_ref_prop,AUri,s_type_object_C,[]);
  3200. end;
  3201. begin
  3202. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3203. Add_ObjectA(s_uri);
  3204. Result := locFactory;
  3205. end;
  3206. procedure TChangeRecorder_Test.date_change();
  3207. const
  3208. LOCAL_PROP = s_date_prop;
  3209. VAL_1 : TSDODate = ( Date : 39000; HourOffset : 1; MinuteOffset : 2; );
  3210. VAL_2 : TSDODate = ( Date : 45678; HourOffset : 9; MinuteOffset : 10; );
  3211. var
  3212. locObj : ISDODataObject;
  3213. begin
  3214. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3215. record_date(locObj,LOCAL_PROP);
  3216. InitRecorder();
  3217. locObj.setDate(LOCAL_PROP,VAL_1);
  3218. record_date(locObj,LOCAL_PROP);
  3219. InitRecorder();
  3220. locObj.setDate(LOCAL_PROP,VAL_2);
  3221. record_date(locObj,LOCAL_PROP);
  3222. InitRecorder();
  3223. locObj.setNull(LOCAL_PROP);
  3224. record_date(locObj,LOCAL_PROP);
  3225. InitRecorder();
  3226. locObj.setDate(LOCAL_PROP,VAL_1);
  3227. record_date(locObj,LOCAL_PROP);
  3228. InitRecorder();
  3229. locObj.unset(LOCAL_PROP);
  3230. record_date(locObj,LOCAL_PROP);
  3231. end;
  3232. procedure TChangeRecorder_Test.InitRecorder();
  3233. begin
  3234. FreeAndNil(FRecorder);
  3235. FChangeSummary := nil;
  3236. FRecorder := CreateRecorder();
  3237. end;
  3238. procedure TChangeRecorder_Test.int_change();
  3239. const
  3240. LOCAL_PROP = s_integer_prop;
  3241. var
  3242. locObj : ISDODataObject;
  3243. begin
  3244. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3245. record_int(locObj,LOCAL_PROP);
  3246. InitRecorder();
  3247. locObj.setInteger(LOCAL_PROP,1210);
  3248. record_int(locObj,LOCAL_PROP);
  3249. InitRecorder();
  3250. locObj.setInteger(LOCAL_PROP,-76);
  3251. record_int(locObj,LOCAL_PROP);
  3252. InitRecorder();
  3253. locObj.setNull(LOCAL_PROP);
  3254. record_int(locObj,LOCAL_PROP);
  3255. InitRecorder();
  3256. locObj.setInteger(LOCAL_PROP,1210);
  3257. record_int(locObj,LOCAL_PROP);
  3258. InitRecorder();
  3259. locObj.unset(LOCAL_PROP);
  3260. record_int(locObj,LOCAL_PROP);
  3261. end;
  3262. procedure TChangeRecorder_Test.multi_call_boolean();
  3263. var
  3264. locObj : ISDODataObject;
  3265. locProp : ISDOProperty;
  3266. locChangeInfo : TDataObjectChangeInfo;
  3267. i : PtrInt;
  3268. locListX : ISDOChangedDataObjectListEx;
  3269. begin
  3270. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3271. locProp := locObj.getProperty(s_bool_prop);
  3272. FRecorder.recordChange(locObj,locProp);
  3273. i := IndexOf(locObj,FRecorder.Store);
  3274. Check( ( i >= 0 ) );
  3275. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3276. locChangeInfo := locListX.getInfo(i);
  3277. CheckEquals(1,locChangeInfo.ChangeList.size());
  3278. FRecorder.recordChange(locObj,locProp);
  3279. locObj.setBoolean(locProp,False);
  3280. i := IndexOf(locObj,FRecorder.Store);
  3281. Check( ( i >= 0 ) );
  3282. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3283. locChangeInfo := locListX.getInfo(i);
  3284. CheckEquals(1,locChangeInfo.ChangeList.size());
  3285. FRecorder.recordChange(locObj,locProp);
  3286. FRecorder.recordChange(locObj,locProp);
  3287. CheckEquals(1,locChangeInfo.ChangeList.size());
  3288. end;
  3289. procedure TChangeRecorder_Test.multi_call_byte();
  3290. var
  3291. locObj : ISDODataObject;
  3292. locProp : ISDOProperty;
  3293. locChangeInfo : TDataObjectChangeInfo;
  3294. i : PtrInt;
  3295. locListX : ISDOChangedDataObjectListEx;
  3296. begin
  3297. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3298. locProp := locObj.getProperty(s_byte_prop);
  3299. FRecorder.recordChange(locObj,locProp);
  3300. i := IndexOf(locObj,FRecorder.Store);
  3301. Check( ( i >= 0 ) );
  3302. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3303. locChangeInfo := locListX.getInfo(i);
  3304. CheckEquals(1,locChangeInfo.ChangeList.size());
  3305. FRecorder.recordChange(locObj,locProp);
  3306. locObj.setByte(locProp,78);
  3307. i := IndexOf(locObj,FRecorder.Store);
  3308. Check( ( i >= 0 ) );
  3309. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3310. locChangeInfo := locListX.getInfo(i);
  3311. CheckEquals(1,locChangeInfo.ChangeList.size());
  3312. FRecorder.recordChange(locObj,locProp);
  3313. FRecorder.recordChange(locObj,locProp);
  3314. CheckEquals(1,locChangeInfo.ChangeList.size());
  3315. end;
  3316. procedure TChangeRecorder_Test.multi_call_date();
  3317. const
  3318. VAL_1 : TSDODate = ( Date : 39000; HourOffset : 1; MinuteOffset : 2; );
  3319. var
  3320. locObj : ISDODataObject;
  3321. locProp : ISDOProperty;
  3322. locChangeInfo : TDataObjectChangeInfo;
  3323. i : PtrInt;
  3324. locListX : ISDOChangedDataObjectListEx;
  3325. begin
  3326. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3327. locProp := locObj.getProperty(s_date_prop);
  3328. FRecorder.recordChange(locObj,locProp);
  3329. i := IndexOf(locObj,FRecorder.Store);
  3330. Check( ( i >= 0 ) );
  3331. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3332. locChangeInfo := locListX.getInfo(i);
  3333. CheckEquals(1,locChangeInfo.ChangeList.size());
  3334. FRecorder.recordChange(locObj,locProp);
  3335. locObj.setDate(locProp,VAL_1);
  3336. i := IndexOf(locObj,FRecorder.Store);
  3337. Check( ( i >= 0 ) );
  3338. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3339. locChangeInfo := locListX.getInfo(i);
  3340. CheckEquals(1,locChangeInfo.ChangeList.size());
  3341. FRecorder.recordChange(locObj,locProp);
  3342. FRecorder.recordChange(locObj,locProp);
  3343. CheckEquals(1,locChangeInfo.ChangeList.size());
  3344. end;
  3345. procedure TChangeRecorder_Test.multi_call_int();
  3346. var
  3347. locObj : ISDODataObject;
  3348. locProp : ISDOProperty;
  3349. locChangeInfo : TDataObjectChangeInfo;
  3350. i : PtrInt;
  3351. locListX : ISDOChangedDataObjectListEx;
  3352. begin
  3353. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3354. locProp := locObj.getProperty(s_integer_prop);
  3355. FRecorder.recordChange(locObj,locProp);
  3356. i := IndexOf(locObj,FRecorder.Store);
  3357. Check( ( i >= 0 ) );
  3358. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3359. locChangeInfo := locListX.getInfo(i);
  3360. CheckEquals(1,locChangeInfo.ChangeList.size());
  3361. FRecorder.recordChange(locObj,locProp);
  3362. locObj.setInteger(locProp,1210);
  3363. i := IndexOf(locObj,FRecorder.Store);
  3364. Check( ( i >= 0 ) );
  3365. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3366. locChangeInfo := locListX.getInfo(i);
  3367. CheckEquals(1,locChangeInfo.ChangeList.size());
  3368. FRecorder.recordChange(locObj,locProp);
  3369. FRecorder.recordChange(locObj,locProp);
  3370. CheckEquals(1,locChangeInfo.ChangeList.size());
  3371. end;
  3372. procedure TChangeRecorder_Test.multi_call_string();
  3373. var
  3374. locObj : ISDODataObject;
  3375. locProp : ISDOProperty;
  3376. locChangeInfo : TDataObjectChangeInfo;
  3377. i : PtrInt;
  3378. locListX : ISDOChangedDataObjectListEx;
  3379. begin
  3380. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3381. locProp := locObj.getProperty(s_string_prop);
  3382. FRecorder.recordChange(locObj,locProp);
  3383. i := IndexOf(locObj,FRecorder.Store);
  3384. Check( ( i >= 0 ) );
  3385. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3386. locChangeInfo := locListX.getInfo(i);
  3387. CheckEquals(1,locChangeInfo.ChangeList.size());
  3388. FRecorder.recordChange(locObj,locProp);
  3389. locObj.setString(locProp,'qwerty#azerty');
  3390. i := IndexOf(locObj,FRecorder.Store);
  3391. Check( ( i >= 0 ) );
  3392. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3393. locChangeInfo := locListX.getInfo(i);
  3394. CheckEquals(1,locChangeInfo.ChangeList.size());
  3395. FRecorder.recordChange(locObj,locProp);
  3396. FRecorder.recordChange(locObj,locProp);
  3397. CheckEquals(1,locChangeInfo.ChangeList.size());
  3398. end;
  3399. {$IFDEF HAS_SDO_CHAR}
  3400. procedure TChangeRecorder_Test.record_char(
  3401. const ADataObject: ISDODataObject;
  3402. const APropName: string
  3403. );
  3404. var
  3405. locProp : ISDOProperty;
  3406. locValue : TSDOChar;
  3407. locSetting : TValueSetting;
  3408. i : PtrInt;
  3409. locListX : ISDOChangedDataObjectListEx;
  3410. locChangeInfo : TDataObjectChangeInfo;
  3411. begin
  3412. locProp := ADataObject.getProperty(APropName);
  3413. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  3414. i := IndexOf(ADataObject,FRecorder.Store);
  3415. CheckEquals(-1,i);
  3416. locValue := ADataObject.getCharacter(APropName);
  3417. FRecorder.recordChange(ADataObject,locProp);
  3418. CheckEquals(locValue,ADataObject.getCharacter(APropName), 'The change recorder should not modify the object.');
  3419. i := IndexOf(ADataObject,FRecorder.Store);
  3420. Check( ( i >= 0 ) );
  3421. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3422. locChangeInfo := locListX.getInfo(i);
  3423. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  3424. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  3425. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  3426. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  3427. CheckEquals(1, locChangeInfo.ChangeList.size());
  3428. locSetting := locChangeInfo.ChangeList.getItem(0);
  3429. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  3430. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  3431. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  3432. CheckEquals(ADataObject.getCharacter(locProp), locSetting.getCharacterValue());
  3433. end;
  3434. procedure TChangeRecorder_Test.multi_call_char();
  3435. const
  3436. LOCAL_PROP = s_char_prop;
  3437. var
  3438. locObj : ISDODataObject;
  3439. locProp : ISDOProperty;
  3440. locChangeInfo : TDataObjectChangeInfo;
  3441. i : PtrInt;
  3442. locListX : ISDOChangedDataObjectListEx;
  3443. begin
  3444. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3445. locProp := locObj.getProperty(LOCAL_PROP);
  3446. FRecorder.recordChange(locObj,locProp);
  3447. i := IndexOf(locObj,FRecorder.Store);
  3448. Check( ( i >= 0 ) );
  3449. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3450. locChangeInfo := locListX.getInfo(i);
  3451. CheckEquals(1,locChangeInfo.ChangeList.size());
  3452. FRecorder.recordChange(locObj,locProp);
  3453. locObj.setCharacter(locProp,TSDOChar(78));
  3454. i := IndexOf(locObj,FRecorder.Store);
  3455. Check( ( i >= 0 ) );
  3456. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3457. locChangeInfo := locListX.getInfo(i);
  3458. CheckEquals(1,locChangeInfo.ChangeList.size());
  3459. FRecorder.recordChange(locObj,locProp);
  3460. FRecorder.recordChange(locObj,locProp);
  3461. CheckEquals(1,locChangeInfo.ChangeList.size());
  3462. end;
  3463. procedure TChangeRecorder_Test.char_change();
  3464. const
  3465. LOCAL_PROP = s_char_prop;
  3466. var
  3467. locObj : ISDODataObject;
  3468. begin
  3469. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3470. record_char(locObj,LOCAL_PROP);
  3471. InitRecorder();
  3472. locObj.setCharacter(LOCAL_PROP,TSDOChar(123));
  3473. record_char(locObj,LOCAL_PROP);
  3474. InitRecorder();
  3475. locObj.setCharacter(LOCAL_PROP,TSDOChar(76));
  3476. record_char(locObj,LOCAL_PROP);
  3477. InitRecorder();
  3478. locObj.setNull(LOCAL_PROP);
  3479. record_char(locObj,LOCAL_PROP);
  3480. InitRecorder();
  3481. locObj.setCharacter(LOCAL_PROP,TSDOChar(123));
  3482. record_char(locObj,LOCAL_PROP);
  3483. InitRecorder();
  3484. locObj.unset(LOCAL_PROP);
  3485. record_char(locObj,LOCAL_PROP);
  3486. end;
  3487. {$ENDIF HAS_SDO_CHAR}
  3488. {$IFDEF HAS_SDO_BYTES}
  3489. procedure TChangeRecorder_Test.record_bytes(
  3490. const ADataObject: ISDODataObject;
  3491. const APropName: string
  3492. );
  3493. var
  3494. locProp : ISDOProperty;
  3495. locValue : TSDOBytes;
  3496. locSetting : TValueSetting;
  3497. i : PtrInt;
  3498. locListX : ISDOChangedDataObjectListEx;
  3499. locChangeInfo : TDataObjectChangeInfo;
  3500. begin
  3501. locProp := ADataObject.getProperty(APropName);
  3502. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  3503. i := IndexOf(ADataObject,FRecorder.Store);
  3504. CheckEquals(-1,i);
  3505. locValue := ADataObject.getBytes(APropName);
  3506. FRecorder.recordChange(ADataObject,locProp);
  3507. CheckEquals(locValue,ADataObject.getBytes(APropName), 'The change recorder should not modify the object.');
  3508. i := IndexOf(ADataObject,FRecorder.Store);
  3509. Check( ( i >= 0 ) );
  3510. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3511. locChangeInfo := locListX.getInfo(i);
  3512. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  3513. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  3514. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  3515. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  3516. CheckEquals(1, locChangeInfo.ChangeList.size());
  3517. locSetting := locChangeInfo.ChangeList.getItem(0);
  3518. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  3519. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  3520. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  3521. CheckEquals(ADataObject.getBytes(locProp), locSetting.getBytesValue());
  3522. end;
  3523. procedure TChangeRecorder_Test.multi_call_bytes();
  3524. const
  3525. LOCAL_PROP = s_bytes_prop;
  3526. var
  3527. VAL_1 : TSDOBytes;
  3528. procedure SetConstants();
  3529. var
  3530. v : TSDOBytes;
  3531. k : Integer;
  3532. begin
  3533. SetLength(v,10);
  3534. for k := 0 to High(v) do
  3535. v[k] := k mod High(TSDOByte);
  3536. VAL_1 := v;
  3537. end;
  3538. var
  3539. locObj : ISDODataObject;
  3540. locProp : ISDOProperty;
  3541. locChangeInfo : TDataObjectChangeInfo;
  3542. i : PtrInt;
  3543. locListX : ISDOChangedDataObjectListEx;
  3544. begin
  3545. SetConstants();
  3546. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3547. locProp := locObj.getProperty(LOCAL_PROP);
  3548. FRecorder.recordChange(locObj,locProp);
  3549. i := IndexOf(locObj,FRecorder.Store);
  3550. Check( ( i >= 0 ) );
  3551. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3552. locChangeInfo := locListX.getInfo(i);
  3553. CheckEquals(1,locChangeInfo.ChangeList.size());
  3554. FRecorder.recordChange(locObj,locProp);
  3555. locObj.setBytes(locProp,VAL_1);
  3556. i := IndexOf(locObj,FRecorder.Store);
  3557. Check( ( i >= 0 ) );
  3558. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3559. locChangeInfo := locListX.getInfo(i);
  3560. CheckEquals(1,locChangeInfo.ChangeList.size());
  3561. FRecorder.recordChange(locObj,locProp);
  3562. FRecorder.recordChange(locObj,locProp);
  3563. CheckEquals(1,locChangeInfo.ChangeList.size());
  3564. end;
  3565. procedure TChangeRecorder_Test.bytes_change();
  3566. const
  3567. LOCAL_PROP = s_bytes_prop;
  3568. var
  3569. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  3570. procedure SetConstants();
  3571. var
  3572. v : TSDOBytes;
  3573. k : Integer;
  3574. begin
  3575. SetLength(v,10);
  3576. for k := 0 to High(v) do
  3577. v[k] := k mod High(TSDOByte);
  3578. VAL_1 := v;
  3579. v := nil;
  3580. VAL_2 := nil;
  3581. SetLength(v,20);
  3582. for k := 0 to High(v) do
  3583. v[k] := ( ( 3 * k ) + 1 ) mod High(TSDOByte);
  3584. VAL_3 := v;
  3585. end;
  3586. var
  3587. locObj : ISDODataObject;
  3588. begin
  3589. SetConstants();
  3590. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3591. record_bytes(locObj,LOCAL_PROP);
  3592. InitRecorder();
  3593. locObj.setBytes(LOCAL_PROP,VAL_1);
  3594. record_bytes(locObj,LOCAL_PROP);
  3595. InitRecorder();
  3596. locObj.setBytes(LOCAL_PROP,VAL_2);
  3597. record_bytes(locObj,LOCAL_PROP);
  3598. InitRecorder();
  3599. locObj.setNull(LOCAL_PROP);
  3600. record_bytes(locObj,LOCAL_PROP);
  3601. InitRecorder();
  3602. locObj.setBytes(LOCAL_PROP,VAL_3);
  3603. record_bytes(locObj,LOCAL_PROP);
  3604. InitRecorder();
  3605. locObj.unset(LOCAL_PROP);
  3606. record_bytes(locObj,LOCAL_PROP);
  3607. end;
  3608. {$ENDIF HAS_SDO_BYTES}
  3609. {$IFDEF HAS_SDO_CURRENCY}
  3610. procedure TChangeRecorder_Test.record_currency(
  3611. const ADataObject: ISDODataObject;
  3612. const APropName: string
  3613. );
  3614. var
  3615. locProp : ISDOProperty;
  3616. locValue : TSDOCurrency;
  3617. locSetting : TValueSetting;
  3618. i : PtrInt;
  3619. locListX : ISDOChangedDataObjectListEx;
  3620. locChangeInfo : TDataObjectChangeInfo;
  3621. begin
  3622. locProp := ADataObject.getProperty(APropName);
  3623. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  3624. i := IndexOf(ADataObject,FRecorder.Store);
  3625. CheckEquals(-1,i);
  3626. locValue := ADataObject.getCurrency(APropName);
  3627. FRecorder.recordChange(ADataObject,locProp);
  3628. CheckEquals(locValue,ADataObject.getCurrency(APropName), 'The change recorder should not modify the object.');
  3629. i := IndexOf(ADataObject,FRecorder.Store);
  3630. Check( ( i >= 0 ) );
  3631. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3632. locChangeInfo := locListX.getInfo(i);
  3633. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  3634. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  3635. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  3636. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  3637. CheckEquals(1, locChangeInfo.ChangeList.size());
  3638. locSetting := locChangeInfo.ChangeList.getItem(0);
  3639. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  3640. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  3641. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  3642. CheckEquals(ADataObject.getCurrency(locProp), locSetting.getCurrencyValue());
  3643. end;
  3644. procedure TChangeRecorder_Test.multi_call_currency();
  3645. const
  3646. LOCAL_PROP = s_currency_prop;
  3647. var
  3648. locObj : ISDODataObject;
  3649. locProp : ISDOProperty;
  3650. locChangeInfo : TDataObjectChangeInfo;
  3651. i : PtrInt;
  3652. locListX : ISDOChangedDataObjectListEx;
  3653. begin
  3654. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3655. locProp := locObj.getProperty(LOCAL_PROP);
  3656. FRecorder.recordChange(locObj,locProp);
  3657. i := IndexOf(locObj,FRecorder.Store);
  3658. Check( ( i >= 0 ) );
  3659. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3660. locChangeInfo := locListX.getInfo(i);
  3661. CheckEquals(1,locChangeInfo.ChangeList.size());
  3662. FRecorder.recordChange(locObj,locProp);
  3663. locObj.setCurrency(locProp,7886556852);
  3664. i := IndexOf(locObj,FRecorder.Store);
  3665. Check( ( i >= 0 ) );
  3666. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3667. locChangeInfo := locListX.getInfo(i);
  3668. CheckEquals(1,locChangeInfo.ChangeList.size());
  3669. FRecorder.recordChange(locObj,locProp);
  3670. FRecorder.recordChange(locObj,locProp);
  3671. CheckEquals(1,locChangeInfo.ChangeList.size());
  3672. end;
  3673. procedure TChangeRecorder_Test.currency_change();
  3674. const
  3675. LOCAL_PROP = s_currency_prop;
  3676. var
  3677. locObj : ISDODataObject;
  3678. begin
  3679. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3680. record_currency(locObj,LOCAL_PROP);
  3681. InitRecorder();
  3682. locObj.setCurrency(LOCAL_PROP,123963258741);
  3683. record_currency(locObj,LOCAL_PROP);
  3684. InitRecorder();
  3685. locObj.setCurrency(LOCAL_PROP,7614785236654);
  3686. record_currency(locObj,LOCAL_PROP);
  3687. InitRecorder();
  3688. locObj.setNull(LOCAL_PROP);
  3689. record_currency(locObj,LOCAL_PROP);
  3690. InitRecorder();
  3691. locObj.setCurrency(LOCAL_PROP,123321652);
  3692. record_currency(locObj,LOCAL_PROP);
  3693. InitRecorder();
  3694. locObj.unset(LOCAL_PROP);
  3695. record_currency(locObj,LOCAL_PROP);
  3696. end;
  3697. {$ENDIF HAS_SDO_CURRENCY}
  3698. {$IFDEF HAS_SDO_DOUBLE}
  3699. procedure TChangeRecorder_Test.record_double(
  3700. const ADataObject: ISDODataObject;
  3701. const APropName: string
  3702. );
  3703. var
  3704. locProp : ISDOProperty;
  3705. locValue : TSDODouble;
  3706. locSetting : TValueSetting;
  3707. i : PtrInt;
  3708. locListX : ISDOChangedDataObjectListEx;
  3709. locChangeInfo : TDataObjectChangeInfo;
  3710. begin
  3711. locProp := ADataObject.getProperty(APropName);
  3712. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  3713. i := IndexOf(ADataObject,FRecorder.Store);
  3714. CheckEquals(-1,i);
  3715. locValue := ADataObject.getDouble(APropName);
  3716. FRecorder.recordChange(ADataObject,locProp);
  3717. CheckEquals(locValue,ADataObject.getDouble(APropName), 'The change recorder should not modify the object.');
  3718. i := IndexOf(ADataObject,FRecorder.Store);
  3719. Check( ( i >= 0 ) );
  3720. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3721. locChangeInfo := locListX.getInfo(i);
  3722. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  3723. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  3724. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  3725. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  3726. CheckEquals(1, locChangeInfo.ChangeList.size());
  3727. locSetting := locChangeInfo.ChangeList.getItem(0);
  3728. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  3729. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  3730. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  3731. CheckEquals(ADataObject.getDouble(locProp), locSetting.getDoubleValue());
  3732. end;
  3733. procedure TChangeRecorder_Test.multi_call_double();
  3734. const
  3735. LOCAL_PROP = s_double_prop;
  3736. var
  3737. locObj : ISDODataObject;
  3738. locProp : ISDOProperty;
  3739. locChangeInfo : TDataObjectChangeInfo;
  3740. i : PtrInt;
  3741. locListX : ISDOChangedDataObjectListEx;
  3742. begin
  3743. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3744. locProp := locObj.getProperty(LOCAL_PROP);
  3745. FRecorder.recordChange(locObj,locProp);
  3746. i := IndexOf(locObj,FRecorder.Store);
  3747. Check( ( i >= 0 ) );
  3748. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3749. locChangeInfo := locListX.getInfo(i);
  3750. CheckEquals(1,locChangeInfo.ChangeList.size());
  3751. FRecorder.recordChange(locObj,locProp);
  3752. locObj.setDouble(locProp,7886556852);
  3753. i := IndexOf(locObj,FRecorder.Store);
  3754. Check( ( i >= 0 ) );
  3755. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3756. locChangeInfo := locListX.getInfo(i);
  3757. CheckEquals(1,locChangeInfo.ChangeList.size());
  3758. FRecorder.recordChange(locObj,locProp);
  3759. FRecorder.recordChange(locObj,locProp);
  3760. CheckEquals(1,locChangeInfo.ChangeList.size());
  3761. end;
  3762. procedure TChangeRecorder_Test.double_change();
  3763. const
  3764. LOCAL_PROP = s_double_prop;
  3765. var
  3766. locObj : ISDODataObject;
  3767. begin
  3768. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3769. record_double(locObj,LOCAL_PROP);
  3770. InitRecorder();
  3771. locObj.setDouble(LOCAL_PROP,123963258741);
  3772. record_double(locObj,LOCAL_PROP);
  3773. InitRecorder();
  3774. locObj.setDouble(LOCAL_PROP,7614785236654);
  3775. record_double(locObj,LOCAL_PROP);
  3776. InitRecorder();
  3777. locObj.setNull(LOCAL_PROP);
  3778. record_double(locObj,LOCAL_PROP);
  3779. InitRecorder();
  3780. locObj.setDouble(LOCAL_PROP,123321652);
  3781. record_double(locObj,LOCAL_PROP);
  3782. InitRecorder();
  3783. locObj.unset(LOCAL_PROP);
  3784. record_double(locObj,LOCAL_PROP);
  3785. end;
  3786. {$ENDIF HAS_SDO_DOUBLE}
  3787. {$IFDEF HAS_SDO_FLOAT}
  3788. procedure TChangeRecorder_Test.record_float(
  3789. const ADataObject: ISDODataObject;
  3790. const APropName: string
  3791. );
  3792. var
  3793. locProp : ISDOProperty;
  3794. locValue : TSDOFloat;
  3795. locSetting : TValueSetting;
  3796. i : PtrInt;
  3797. locListX : ISDOChangedDataObjectListEx;
  3798. locChangeInfo : TDataObjectChangeInfo;
  3799. begin
  3800. locProp := ADataObject.getProperty(APropName);
  3801. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  3802. i := IndexOf(ADataObject,FRecorder.Store);
  3803. CheckEquals(-1,i);
  3804. locValue := ADataObject.getFloat(APropName);
  3805. FRecorder.recordChange(ADataObject,locProp);
  3806. CheckEquals(locValue,ADataObject.getFloat(APropName), 'The change recorder should not modify the object.');
  3807. i := IndexOf(ADataObject,FRecorder.Store);
  3808. Check( ( i >= 0 ) );
  3809. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3810. locChangeInfo := locListX.getInfo(i);
  3811. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  3812. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  3813. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  3814. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  3815. CheckEquals(1, locChangeInfo.ChangeList.size());
  3816. locSetting := locChangeInfo.ChangeList.getItem(0);
  3817. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  3818. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  3819. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  3820. CheckEquals(ADataObject.getFloat(locProp), locSetting.getFloatValue());
  3821. end;
  3822. procedure TChangeRecorder_Test.multi_call_float();
  3823. const
  3824. LOCAL_PROP = s_float_prop;
  3825. var
  3826. locObj : ISDODataObject;
  3827. locProp : ISDOProperty;
  3828. locChangeInfo : TDataObjectChangeInfo;
  3829. i : PtrInt;
  3830. locListX : ISDOChangedDataObjectListEx;
  3831. begin
  3832. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3833. locProp := locObj.getProperty(LOCAL_PROP);
  3834. FRecorder.recordChange(locObj,locProp);
  3835. i := IndexOf(locObj,FRecorder.Store);
  3836. Check( ( i >= 0 ) );
  3837. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3838. locChangeInfo := locListX.getInfo(i);
  3839. CheckEquals(1,locChangeInfo.ChangeList.size());
  3840. FRecorder.recordChange(locObj,locProp);
  3841. locObj.setFloat(locProp,7886556852);
  3842. i := IndexOf(locObj,FRecorder.Store);
  3843. Check( ( i >= 0 ) );
  3844. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3845. locChangeInfo := locListX.getInfo(i);
  3846. CheckEquals(1,locChangeInfo.ChangeList.size());
  3847. FRecorder.recordChange(locObj,locProp);
  3848. FRecorder.recordChange(locObj,locProp);
  3849. CheckEquals(1,locChangeInfo.ChangeList.size());
  3850. end;
  3851. procedure TChangeRecorder_Test.float_change();
  3852. const
  3853. LOCAL_PROP = s_float_prop;
  3854. var
  3855. locObj : ISDODataObject;
  3856. begin
  3857. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3858. record_float(locObj,LOCAL_PROP);
  3859. InitRecorder();
  3860. locObj.setFloat(LOCAL_PROP,123963258741);
  3861. record_float(locObj,LOCAL_PROP);
  3862. InitRecorder();
  3863. locObj.setFloat(LOCAL_PROP,7614785236654);
  3864. record_float(locObj,LOCAL_PROP);
  3865. InitRecorder();
  3866. locObj.setNull(LOCAL_PROP);
  3867. record_float(locObj,LOCAL_PROP);
  3868. InitRecorder();
  3869. locObj.setFloat(LOCAL_PROP,123321652);
  3870. record_float(locObj,LOCAL_PROP);
  3871. InitRecorder();
  3872. locObj.unset(LOCAL_PROP);
  3873. record_float(locObj,LOCAL_PROP);
  3874. end;
  3875. {$ENDIF HAS_SDO_FLOAT}
  3876. {$IFDEF HAS_SDO_LONG}
  3877. procedure TChangeRecorder_Test.record_long(
  3878. const ADataObject: ISDODataObject;
  3879. const APropName: string
  3880. );
  3881. var
  3882. locProp : ISDOProperty;
  3883. locValue : TSDOLong;
  3884. locSetting : TValueSetting;
  3885. i : PtrInt;
  3886. locListX : ISDOChangedDataObjectListEx;
  3887. locChangeInfo : TDataObjectChangeInfo;
  3888. begin
  3889. locProp := ADataObject.getProperty(APropName);
  3890. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  3891. i := IndexOf(ADataObject,FRecorder.Store);
  3892. CheckEquals(-1,i);
  3893. locValue := ADataObject.getLong(APropName);
  3894. FRecorder.recordChange(ADataObject,locProp);
  3895. CheckEquals(locValue,ADataObject.getLong(APropName), 'The change recorder should not modify the object.');
  3896. i := IndexOf(ADataObject,FRecorder.Store);
  3897. Check( ( i >= 0 ) );
  3898. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3899. locChangeInfo := locListX.getInfo(i);
  3900. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  3901. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  3902. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  3903. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  3904. CheckEquals(1, locChangeInfo.ChangeList.size());
  3905. locSetting := locChangeInfo.ChangeList.getItem(0);
  3906. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  3907. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  3908. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  3909. CheckEquals(ADataObject.getLong(locProp), locSetting.getLongValue());
  3910. end;
  3911. procedure TChangeRecorder_Test.multi_call_long();
  3912. const
  3913. LOCAL_PROP = s_long_prop;
  3914. var
  3915. locObj : ISDODataObject;
  3916. locProp : ISDOProperty;
  3917. locChangeInfo : TDataObjectChangeInfo;
  3918. i : PtrInt;
  3919. locListX : ISDOChangedDataObjectListEx;
  3920. begin
  3921. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3922. locProp := locObj.getProperty(LOCAL_PROP);
  3923. FRecorder.recordChange(locObj,locProp);
  3924. i := IndexOf(locObj,FRecorder.Store);
  3925. Check( ( i >= 0 ) );
  3926. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3927. locChangeInfo := locListX.getInfo(i);
  3928. CheckEquals(1,locChangeInfo.ChangeList.size());
  3929. FRecorder.recordChange(locObj,locProp);
  3930. locObj.setLong(locProp,TSDOLong(78865235820256852));
  3931. i := IndexOf(locObj,FRecorder.Store);
  3932. Check( ( i >= 0 ) );
  3933. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3934. locChangeInfo := locListX.getInfo(i);
  3935. CheckEquals(1,locChangeInfo.ChangeList.size());
  3936. FRecorder.recordChange(locObj,locProp);
  3937. FRecorder.recordChange(locObj,locProp);
  3938. CheckEquals(1,locChangeInfo.ChangeList.size());
  3939. end;
  3940. procedure TChangeRecorder_Test.long_change();
  3941. const
  3942. LOCAL_PROP = s_long_prop;
  3943. var
  3944. locObj : ISDODataObject;
  3945. begin
  3946. locObj := FFactory.createNew(s_uri,s_type_object_A);
  3947. record_long(locObj,LOCAL_PROP);
  3948. InitRecorder();
  3949. locObj.setLong(LOCAL_PROP,TSDOLong(123963258741));
  3950. record_long(locObj,LOCAL_PROP);
  3951. InitRecorder();
  3952. locObj.setLong(LOCAL_PROP,TSDOLong(761478523699123654));
  3953. record_long(locObj,LOCAL_PROP);
  3954. InitRecorder();
  3955. locObj.setNull(LOCAL_PROP);
  3956. record_long(locObj,LOCAL_PROP);
  3957. InitRecorder();
  3958. locObj.setLong(LOCAL_PROP,TSDOLong(1233216549874741225));
  3959. record_long(locObj,LOCAL_PROP);
  3960. InitRecorder();
  3961. locObj.unset(LOCAL_PROP);
  3962. record_long(locObj,LOCAL_PROP);
  3963. end;
  3964. {$ENDIF HAS_SDO_LONG}
  3965. {$IFDEF HAS_SDO_SHORT}
  3966. procedure TChangeRecorder_Test.record_short(
  3967. const ADataObject: ISDODataObject;
  3968. const APropName: string
  3969. );
  3970. var
  3971. locProp : ISDOProperty;
  3972. locValue : TSDOShort;
  3973. locSetting : TValueSetting;
  3974. i : PtrInt;
  3975. locListX : ISDOChangedDataObjectListEx;
  3976. locChangeInfo : TDataObjectChangeInfo;
  3977. begin
  3978. locProp := ADataObject.getProperty(APropName);
  3979. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  3980. i := IndexOf(ADataObject,FRecorder.Store);
  3981. CheckEquals(-1,i);
  3982. locValue := ADataObject.getShort(APropName);
  3983. FRecorder.recordChange(ADataObject,locProp);
  3984. CheckEquals(locValue,ADataObject.getShort(APropName), 'The change recorder should not modify the object.');
  3985. i := IndexOf(ADataObject,FRecorder.Store);
  3986. Check( ( i >= 0 ) );
  3987. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  3988. locChangeInfo := locListX.getInfo(i);
  3989. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  3990. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  3991. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  3992. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  3993. CheckEquals(1, locChangeInfo.ChangeList.size());
  3994. locSetting := locChangeInfo.ChangeList.getItem(0);
  3995. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  3996. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  3997. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  3998. CheckEquals(ADataObject.getShort(locProp), locSetting.getShortValue());
  3999. end;
  4000. procedure TChangeRecorder_Test.multi_call_short();
  4001. const
  4002. LOCAL_PROP = s_short_prop;
  4003. var
  4004. locObj : ISDODataObject;
  4005. locProp : ISDOProperty;
  4006. locChangeInfo : TDataObjectChangeInfo;
  4007. i : PtrInt;
  4008. locListX : ISDOChangedDataObjectListEx;
  4009. begin
  4010. locObj := FFactory.createNew(s_uri,s_type_object_A);
  4011. locProp := locObj.getProperty(LOCAL_PROP);
  4012. FRecorder.recordChange(locObj,locProp);
  4013. i := IndexOf(locObj,FRecorder.Store);
  4014. Check( ( i >= 0 ) );
  4015. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4016. locChangeInfo := locListX.getInfo(i);
  4017. CheckEquals(1,locChangeInfo.ChangeList.size());
  4018. FRecorder.recordChange(locObj,locProp);
  4019. locObj.setShort(locProp,TSDOShort(7882));
  4020. i := IndexOf(locObj,FRecorder.Store);
  4021. Check( ( i >= 0 ) );
  4022. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4023. locChangeInfo := locListX.getInfo(i);
  4024. CheckEquals(1,locChangeInfo.ChangeList.size());
  4025. FRecorder.recordChange(locObj,locProp);
  4026. FRecorder.recordChange(locObj,locProp);
  4027. CheckEquals(1,locChangeInfo.ChangeList.size());
  4028. end;
  4029. procedure TChangeRecorder_Test.short_change();
  4030. const
  4031. LOCAL_PROP = s_short_prop;
  4032. var
  4033. locObj : ISDODataObject;
  4034. begin
  4035. locObj := FFactory.createNew(s_uri,s_type_object_A);
  4036. record_short(locObj,LOCAL_PROP);
  4037. InitRecorder();
  4038. locObj.setShort(LOCAL_PROP,TSDOShort(1239));
  4039. record_short(locObj,LOCAL_PROP);
  4040. InitRecorder();
  4041. locObj.setShort(LOCAL_PROP,TSDOShort(-7614));
  4042. record_short(locObj,LOCAL_PROP);
  4043. InitRecorder();
  4044. locObj.setNull(LOCAL_PROP);
  4045. record_short(locObj,LOCAL_PROP);
  4046. InitRecorder();
  4047. locObj.setShort(LOCAL_PROP,TSDOShort(1225));
  4048. record_short(locObj,LOCAL_PROP);
  4049. InitRecorder();
  4050. locObj.unset(LOCAL_PROP);
  4051. record_short(locObj,LOCAL_PROP);
  4052. end;
  4053. {$ENDIF HAS_SDO_SHORT}
  4054. procedure TChangeRecorder_Test.object_change_contained_prop();
  4055. const
  4056. LOCAL_PROP = s_object_prop;
  4057. LOCAL_PROP_CLASS = s_type_object_B;
  4058. var
  4059. locObj : ISDODataObject;
  4060. begin
  4061. locObj := FFactory.createNew(s_uri,s_type_object_A);
  4062. record_obj(locObj,LOCAL_PROP);
  4063. InitRecorder();
  4064. locObj.setDataObject(LOCAL_PROP,FFactory.createNew(s_uri,LOCAL_PROP_CLASS));
  4065. record_obj(locObj,LOCAL_PROP);
  4066. InitRecorder();
  4067. locObj.setDataObject(LOCAL_PROP,nil);
  4068. record_obj(locObj,LOCAL_PROP);
  4069. InitRecorder();
  4070. locObj.setNull(LOCAL_PROP);
  4071. record_obj(locObj,LOCAL_PROP);
  4072. InitRecorder();
  4073. locObj.setDataObject(LOCAL_PROP,FFactory.createNew(s_uri,LOCAL_PROP_CLASS));
  4074. record_obj(locObj,LOCAL_PROP);
  4075. InitRecorder();
  4076. locObj.unset(LOCAL_PROP);
  4077. record_obj(locObj,LOCAL_PROP);
  4078. end;
  4079. procedure TChangeRecorder_Test.object_change_referenced_prop();
  4080. const
  4081. LOCAL_PROP = s_object_ref_prop;
  4082. LOCAL_PROP_CLASS = s_type_object_C;
  4083. var
  4084. locObj : ISDODataObject;
  4085. begin
  4086. locObj := FFactory.createNew(s_uri,s_type_object_A);
  4087. record_obj(locObj,LOCAL_PROP);
  4088. InitRecorder();
  4089. locObj.setDataObject(LOCAL_PROP,FFactory.createNew(s_uri,LOCAL_PROP_CLASS));
  4090. record_obj(locObj,LOCAL_PROP);
  4091. InitRecorder();
  4092. locObj.setDataObject(LOCAL_PROP,nil);
  4093. record_obj(locObj,LOCAL_PROP);
  4094. InitRecorder();
  4095. locObj.setNull(LOCAL_PROP);
  4096. record_obj(locObj,LOCAL_PROP);
  4097. InitRecorder();
  4098. locObj.setDataObject(LOCAL_PROP,FFactory.createNew(s_uri,LOCAL_PROP_CLASS));
  4099. record_obj(locObj,LOCAL_PROP);
  4100. InitRecorder();
  4101. locObj.unset(LOCAL_PROP);
  4102. record_obj(locObj,LOCAL_PROP);
  4103. end;
  4104. procedure TChangeRecorder_Test.record_bool(
  4105. const ADataObject: ISDODataObject;
  4106. const APropName: string
  4107. );
  4108. var
  4109. locProp : ISDOProperty;
  4110. locValue : TSDOBoolean;
  4111. locSetting : TValueSetting;
  4112. i : PtrInt;
  4113. locListX : ISDOChangedDataObjectListEx;
  4114. locChangeInfo : TDataObjectChangeInfo;
  4115. begin
  4116. locProp := ADataObject.getProperty(APropName);
  4117. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  4118. i := IndexOf(ADataObject,FRecorder.Store);
  4119. CheckEquals(-1,i);
  4120. locValue := ADataObject.getBoolean(APropName);
  4121. FRecorder.recordChange(ADataObject,locProp);
  4122. CheckEquals(locValue,ADataObject.getBoolean(APropName), 'The change recorder should not modify the object.');
  4123. i := IndexOf(ADataObject,FRecorder.Store);
  4124. Check( ( i >= 0 ) );
  4125. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4126. locChangeInfo := locListX.getInfo(i);
  4127. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  4128. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  4129. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  4130. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  4131. CheckEquals(1, locChangeInfo.ChangeList.size());
  4132. locSetting := locChangeInfo.ChangeList.getItem(0);
  4133. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  4134. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  4135. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  4136. CheckEquals(ADataObject.getBoolean(locProp), locSetting.getBooleanValue());
  4137. end;
  4138. procedure TChangeRecorder_Test.record_byte(
  4139. const ADataObject: ISDODataObject;
  4140. const APropName: string
  4141. );
  4142. var
  4143. locProp : ISDOProperty;
  4144. locValue : TSDOByte;
  4145. locSetting : TValueSetting;
  4146. i : PtrInt;
  4147. locListX : ISDOChangedDataObjectListEx;
  4148. locChangeInfo : TDataObjectChangeInfo;
  4149. begin
  4150. locProp := ADataObject.getProperty(APropName);
  4151. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  4152. i := IndexOf(ADataObject,FRecorder.Store);
  4153. CheckEquals(-1,i);
  4154. locValue := ADataObject.getByte(APropName);
  4155. FRecorder.recordChange(ADataObject,locProp);
  4156. CheckEquals(locValue,ADataObject.getByte(APropName), 'The change recorder should not modify the object.');
  4157. i := IndexOf(ADataObject,FRecorder.Store);
  4158. Check( ( i >= 0 ) );
  4159. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4160. locChangeInfo := locListX.getInfo(i);
  4161. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  4162. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  4163. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  4164. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  4165. CheckEquals(1, locChangeInfo.ChangeList.size());
  4166. locSetting := locChangeInfo.ChangeList.getItem(0);
  4167. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  4168. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  4169. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  4170. CheckEquals(ADataObject.getByte(locProp), locSetting.getByteValue());
  4171. end;
  4172. procedure TChangeRecorder_Test.record_date(
  4173. const ADataObject: ISDODataObject;
  4174. const APropName: string
  4175. );
  4176. var
  4177. locProp : ISDOProperty;
  4178. locValue : TSDODateTime;
  4179. locSetting : TValueSetting;
  4180. i : PtrInt;
  4181. locListX : ISDOChangedDataObjectListEx;
  4182. locChangeInfo : TDataObjectChangeInfo;
  4183. begin
  4184. locProp := ADataObject.getProperty(APropName);
  4185. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  4186. i := IndexOf(ADataObject,FRecorder.Store);
  4187. CheckEquals(-1,i);
  4188. locValue := ADataObject.getDate(APropName);
  4189. FRecorder.recordChange(ADataObject,locProp);
  4190. CheckEquals(locValue,ADataObject.getDate(APropName), 'The change recorder should not modify the object.');
  4191. i := IndexOf(ADataObject,FRecorder.Store);
  4192. Check( ( i >= 0 ) );
  4193. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4194. locChangeInfo := locListX.getInfo(i);
  4195. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  4196. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  4197. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  4198. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  4199. CheckEquals(1, locChangeInfo.ChangeList.size());
  4200. locSetting := locChangeInfo.ChangeList.getItem(0);
  4201. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  4202. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  4203. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  4204. CheckEquals(ADataObject.getDate(locProp), locSetting.getDateValue());
  4205. end;
  4206. procedure TChangeRecorder_Test.record_int(
  4207. const ADataObject : ISDODataObject;
  4208. const APropName : string
  4209. );
  4210. var
  4211. locProp : ISDOProperty;
  4212. locValue : TSDOInteger;
  4213. locSetting : TValueSetting;
  4214. i : PtrInt;
  4215. locListX : ISDOChangedDataObjectListEx;
  4216. locChangeInfo : TDataObjectChangeInfo;
  4217. begin
  4218. locProp := ADataObject.getProperty(APropName);
  4219. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  4220. i := IndexOf(ADataObject,FRecorder.Store);
  4221. CheckEquals(-1,i);
  4222. locValue := ADataObject.getInteger(APropName);
  4223. FRecorder.recordChange(ADataObject,locProp);
  4224. CheckEquals(locValue,ADataObject.getInteger(APropName), 'The change recorder should not modify the object.');
  4225. i := IndexOf(ADataObject,FRecorder.Store);
  4226. Check( ( i >= 0 ) );
  4227. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4228. locChangeInfo := locListX.getInfo(i);
  4229. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  4230. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  4231. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  4232. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  4233. CheckEquals(1, locChangeInfo.ChangeList.size());
  4234. locSetting := locChangeInfo.ChangeList.getItem(0);
  4235. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  4236. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  4237. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  4238. CheckEquals(ADataObject.getInteger(locProp), locSetting.getIntegerValue());
  4239. end;
  4240. procedure TChangeRecorder_Test.record_list_int(
  4241. const ADataObject: ISDODataObject;
  4242. const APropName: string
  4243. );
  4244. {var
  4245. locProp : ISDOProperty;
  4246. locValueList : ISDODataObjectList;
  4247. locSetting : TValueSetting;
  4248. i : PtrInt;
  4249. locListX : ISDOChangedDataObjectListEx;
  4250. locChangeInfo : TDataObjectChangeInfo;}
  4251. begin
  4252. {locProp := ADataObject.getProperty(APropName);
  4253. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  4254. CheckEquals(True, locProp.isMany());
  4255. i := IndexOf(ADataObject,FRecorder.Store);
  4256. CheckEquals(-1,i);
  4257. locValue := ADataObject.getInteger(APropName);
  4258. FRecorder.recordChange(ADataObject,locProp);
  4259. CheckEquals(locValue,ADataObject.getInteger(APropName), 'The change recorder should not modify the object.');
  4260. i := IndexOf(ADataObject,FRecorder.Store);
  4261. Check( ( i >= 0 ) );
  4262. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4263. locChangeInfo := locListX.getInfo(i);
  4264. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  4265. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  4266. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  4267. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  4268. CheckEquals(1, locChangeInfo.ChangeList.size());
  4269. locSetting := locChangeInfo.ChangeList.getItem(0);
  4270. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  4271. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  4272. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  4273. CheckEquals(ADataObject.getInteger(locProp), locSetting.getIntegerValue());}
  4274. end;
  4275. procedure TChangeRecorder_Test.record_obj(
  4276. const ADataObject: ISDODataObject;
  4277. const APropName: string
  4278. );
  4279. var
  4280. locProp : ISDOProperty;
  4281. locValue : ISDODataObject;
  4282. locSetting : TValueSetting;
  4283. i : PtrInt;
  4284. locListX : ISDOChangedDataObjectListEx;
  4285. locChangeInfo : TDataObjectChangeInfo;
  4286. begin
  4287. locProp := ADataObject.getProperty(APropName);
  4288. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  4289. i := IndexOf(ADataObject,FRecorder.Store);
  4290. CheckEquals(-1,i);
  4291. locValue := ADataObject.getDataObject(APropName);
  4292. FRecorder.recordChange(ADataObject,locProp);
  4293. CheckEquals(PtrUInt(locValue),PtrUInt(ADataObject.getDataObject(APropName)), 'The change recorder should not modify the object.');
  4294. i := IndexOf(ADataObject,FRecorder.Store);
  4295. Check( ( i >= 0 ) );
  4296. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4297. locChangeInfo := locListX.getInfo(i);
  4298. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  4299. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  4300. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  4301. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  4302. CheckEquals(1, locChangeInfo.ChangeList.size());
  4303. locSetting := locChangeInfo.ChangeList.getItem(0);
  4304. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  4305. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  4306. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  4307. CheckEquals(PtrUInt(ADataObject.getDataObject(locProp)), PtrUInt(locSetting.getDataObjectValue()));
  4308. end;
  4309. procedure TChangeRecorder_Test.record_string(
  4310. const ADataObject: ISDODataObject;
  4311. const APropName: string
  4312. );
  4313. var
  4314. locProp : ISDOProperty;
  4315. locValue : TSDOString;
  4316. locSetting : TValueSetting;
  4317. i : PtrInt;
  4318. locListX : ISDOChangedDataObjectListEx;
  4319. locChangeInfo : TDataObjectChangeInfo;
  4320. begin
  4321. locProp := ADataObject.getProperty(APropName);
  4322. CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
  4323. i := IndexOf(ADataObject,FRecorder.Store);
  4324. CheckEquals(-1,i);
  4325. locValue := ADataObject.getString(APropName);
  4326. FRecorder.recordChange(ADataObject,locProp);
  4327. CheckEquals(locValue,ADataObject.getString(APropName), 'The change recorder should not modify the object.');
  4328. i := IndexOf(ADataObject,FRecorder.Store);
  4329. Check( ( i >= 0 ) );
  4330. locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
  4331. locChangeInfo := locListX.getInfo(i);
  4332. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
  4333. CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
  4334. CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
  4335. CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
  4336. CheckEquals(1, locChangeInfo.ChangeList.size());
  4337. locSetting := locChangeInfo.ChangeList.getItem(0);
  4338. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  4339. CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
  4340. CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
  4341. CheckEquals(ADataObject.getString(locProp), locSetting.getStringValue());
  4342. end;
  4343. procedure TChangeRecorder_Test.SetUp();
  4344. begin
  4345. inherited;
  4346. FRecorder := CreateRecorder();
  4347. FFactory := Create_Factory();
  4348. end;
  4349. procedure TChangeRecorder_Test.string_change();
  4350. const
  4351. LOCAL_PROP = s_string_prop;
  4352. var
  4353. locObj : ISDODataObject;
  4354. begin
  4355. locObj := FFactory.createNew(s_uri,s_type_object_A);
  4356. record_string(locObj,LOCAL_PROP);
  4357. InitRecorder();
  4358. locObj.setString(LOCAL_PROP,RandomString(RandomRange(0,1000)));
  4359. record_string(locObj,LOCAL_PROP);
  4360. InitRecorder();
  4361. locObj.setString(LOCAL_PROP,'');
  4362. record_string(locObj,LOCAL_PROP);
  4363. InitRecorder();
  4364. locObj.setNull(LOCAL_PROP);
  4365. record_string(locObj,LOCAL_PROP);
  4366. InitRecorder();
  4367. locObj.setString(LOCAL_PROP,RandomString(RandomRange(0,1000)));
  4368. record_string(locObj,LOCAL_PROP);
  4369. InitRecorder();
  4370. locObj.unset(LOCAL_PROP);
  4371. record_string(locObj,LOCAL_PROP);
  4372. end;
  4373. procedure TChangeRecorder_Test.TearDown();
  4374. begin
  4375. FFactory := nil;
  4376. FreeAndNil(FRecorder);
  4377. inherited;
  4378. end;
  4379. { TSDOChangeSummary_Test }
  4380. class function TSDOChangeSummary_Test.Create_Factory() : ISDODataFactory;
  4381. var
  4382. locFactory : ISDODataFactory;
  4383. procedure Add_ObjectA(const AUri : string);
  4384. var
  4385. locObj : ISDOType;
  4386. begin
  4387. locFactory.AddType(AUri,s_type_object_A,[]);
  4388. locObj := locFactory.getType(AUri,s_type_object_A);
  4389. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[]);
  4390. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  4391. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  4392. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  4393. {$IFDEF HAS_SDO_BYTES}
  4394. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  4395. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  4396. {$ENDIF HAS_SDO_BYTES}
  4397. {$IFDEF HAS_SDO_CHAR}
  4398. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  4399. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  4400. {$ENDIF HAS_SDO_CHAR}
  4401. {$IFDEF HAS_SDO_CURRENCY}
  4402. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  4403. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  4404. {$ENDIF HAS_SDO_CURRENCY}
  4405. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  4406. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  4407. {$IFDEF HAS_SDO_DOUBLE}
  4408. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  4409. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  4410. {$ENDIF HAS_SDO_DOUBLE}
  4411. {$IFDEF HAS_SDO_FLOAT}
  4412. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  4413. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  4414. {$ENDIF HAS_SDO_FLOAT}
  4415. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4416. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  4417. {$IFDEF HAS_SDO_LONG}
  4418. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  4419. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  4420. {$ENDIF HAS_SDO_LONG}
  4421. {$IFDEF HAS_SDO_SHORT}
  4422. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  4423. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  4424. {$ENDIF HAS_SDO_SHORT}
  4425. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4426. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  4427. end;
  4428. begin
  4429. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  4430. Add_ObjectA(s_uri);
  4431. Result := locFactory;
  4432. end;
  4433. function TSDOChangeSummary_Test.CreateRecorder(): TChangeRecorder;
  4434. var
  4435. ls : ISDOChangedDataObjectList;
  4436. begin
  4437. ls := TSDOChangedDataObjectList.Create();
  4438. FChangeSummary := TSDOChangeSummary.Create(ls);
  4439. Result := TChangeRecorder.Create(ls, FChangeSummary);
  4440. end;
  4441. procedure TSDOChangeSummary_Test.InitRecorder();
  4442. begin
  4443. FChangeSummary := nil;
  4444. FreeAndNil(FRecorder);
  4445. FRecorder := CreateRecorder();
  4446. //FChangeSummary := TSDOChangeSummary.Create(FRecorder.Store);
  4447. end;
  4448. procedure TSDOChangeSummary_Test.SetUp();
  4449. begin
  4450. inherited;
  4451. FRecorder := CreateRecorder();
  4452. FFactory := Create_Factory();
  4453. FFactoryX := Create_FactoryX();
  4454. InitRecorder();
  4455. end;
  4456. procedure TSDOChangeSummary_Test.TearDown();
  4457. begin
  4458. FChangeSummary := nil;
  4459. FreeAndNil(FRecorder);
  4460. FFactoryX := nil;
  4461. FFactory := nil;
  4462. inherited;
  4463. end;
  4464. procedure TSDOChangeSummary_Test.logging_state();
  4465. begin
  4466. CheckEquals(False,FChangeSummary.isLogging(),'By default, the logging should b OFF');
  4467. FChangeSummary.endLogging();
  4468. CheckEquals(False,FChangeSummary.isLogging());
  4469. FChangeSummary.endLogging();
  4470. FChangeSummary.endLogging();
  4471. CheckEquals(False,FChangeSummary.isLogging());
  4472. FChangeSummary.beginLogging();
  4473. CheckEquals(True,FChangeSummary.isLogging());
  4474. FChangeSummary.beginLogging();
  4475. FChangeSummary.beginLogging();
  4476. CheckEquals(True,FChangeSummary.isLogging());
  4477. FChangeSummary.endLogging();
  4478. CheckEquals(False,FChangeSummary.isLogging());
  4479. FChangeSummary.beginLogging();
  4480. CheckEquals(True,FChangeSummary.isLogging());
  4481. end;
  4482. procedure TSDOChangeSummary_Test.isCreated();
  4483. var
  4484. locObj : ISDODataObject;
  4485. begin
  4486. locObj := FFactory.createNew(s_uri,s_type_object_A);
  4487. FChangeSummary.beginLogging();
  4488. CheckEquals(False,FChangeSummary.isCreated(nil));
  4489. CheckEquals(False,FChangeSummary.isCreated(locObj));
  4490. FRecorder.recordCreation(locObj);
  4491. CheckEquals(True,FChangeSummary.isCreated(locObj));
  4492. //-------------------------
  4493. InitRecorder();
  4494. FChangeSummary.beginLogging();
  4495. CheckEquals(False,FChangeSummary.isCreated(locObj));
  4496. FRecorder.recordChange(locObj,locObj.getProperty(s_integer_prop));
  4497. CheckEquals(False,FChangeSummary.isCreated(locObj));
  4498. //-------------------------
  4499. InitRecorder();
  4500. FChangeSummary.beginLogging();
  4501. CheckEquals(False,FChangeSummary.isCreated(locObj));
  4502. FRecorder.recordDeletion(locObj);
  4503. CheckEquals(False,FChangeSummary.isCreated(locObj));
  4504. end;
  4505. procedure TSDOChangeSummary_Test.isModified();
  4506. var
  4507. locObj : ISDODataObject;
  4508. begin
  4509. locObj := FFactory.createNew(s_uri,s_type_object_A);
  4510. FChangeSummary.beginLogging();
  4511. CheckEquals(False,FChangeSummary.isModified(nil));
  4512. CheckEquals(False,FChangeSummary.isModified(locObj));
  4513. FRecorder.recordChange(locObj,locObj.getProperty(s_integer_prop));
  4514. CheckEquals(True,FChangeSummary.isModified(locObj));
  4515. //-------------------------
  4516. InitRecorder();
  4517. FChangeSummary.beginLogging();
  4518. CheckEquals(False,FChangeSummary.isModified(locObj));
  4519. FRecorder.recordCreation(locObj);
  4520. CheckEquals(False,FChangeSummary.isModified(locObj));
  4521. //-------------------------
  4522. InitRecorder();
  4523. FChangeSummary.beginLogging();
  4524. CheckEquals(False,FChangeSummary.isModified(locObj));
  4525. FRecorder.recordDeletion(locObj);
  4526. CheckEquals(False,FChangeSummary.isModified(locObj));
  4527. end;
  4528. procedure TSDOChangeSummary_Test.isDeleted();
  4529. var
  4530. locObj : ISDODataObject;
  4531. ls : ISDOChangedDataObjectList;
  4532. i, c, locFoundIdx : PtrInt;
  4533. locFound : Boolean;
  4534. begin
  4535. locObj := FFactory.createNew(s_uri,s_type_object_A);
  4536. locObj.setInteger(s_integer_prop,RandomRange(-1210,1210));
  4537. locObj.getList(s_integer_propList).append(RandomRange(-1210,1210));
  4538. locObj.getList(s_integer_propList).append(RandomRange(-1210,1210));
  4539. locObj.setString(s_string_prop,RandomString(1000));
  4540. locObj.getList(s_string_propList).append(RandomString(1210));
  4541. locObj.getList(s_string_propList).append(RandomString(1210));
  4542. FChangeSummary.beginLogging();
  4543. CheckEquals(False,FChangeSummary.isDeleted(nil));
  4544. CheckEquals(False,FChangeSummary.isDeleted(locObj));
  4545. FRecorder.recordDeletion(locObj);
  4546. CheckEquals(True,FChangeSummary.isDeleted(locObj));
  4547. ls := FChangeSummary.getChangedDataObjects();
  4548. Check( ls.size() > 0 );
  4549. c := ls.size();
  4550. locFoundIdx := -1;
  4551. locFound := False;
  4552. for i := 0 to Pred(c) do begin
  4553. if ( ls.getType(i) = ctDelete ) and ( locObj = ls.getDataObject(i) ) then begin
  4554. locFoundIdx := i;
  4555. locFound := True;
  4556. Break;
  4557. end;
  4558. end;
  4559. CheckEquals(True,locFound);
  4560. if ( locFoundIdx < Pred(c) ) then begin
  4561. locFound := False;
  4562. for i := Succ(locFoundIdx) to Pred(c) do begin
  4563. if ( ls.getType(i) = ctDelete ) and ( locObj = ls.getDataObject(i) ) then begin
  4564. locFound := True;
  4565. Break;
  4566. end;
  4567. end;
  4568. CheckEquals(False, locFound, 'There should be _only one copy_ of the deleted object.');
  4569. end;
  4570. end;
  4571. procedure TSDOChangeSummary_Test.getChangedDataObjects();
  4572. const LOCAL_PROP = s_integer_prop;
  4573. var
  4574. ls : ISDOChangedDataObjectList;
  4575. vobj : array of ISDODataObject;
  4576. vct : array of TChangeType;
  4577. l, i, j : PtrInt;
  4578. locProp : ISDOProperty;
  4579. begin
  4580. ls := FChangeSummary.getChangedDataObjects();
  4581. CheckNotEquals(PtrUInt(nil),PtrUInt(ls));
  4582. CheckEquals(0,ls.size());
  4583. l := RandomRange(0,1000);
  4584. if ( l > 0 ) then begin
  4585. SetLength(vobj,l);
  4586. try
  4587. SetLength(vct,l);
  4588. for i := 0 to Pred(l) do begin
  4589. vobj[i] := FFactory.createNew(s_uri,s_type_object_A);
  4590. vobj[i].setInteger(s_integer_prop,i + 1);
  4591. vct[i] := TChangeType(RandomRange(Ord(ctCreate),Ord(ctDelete)));
  4592. end;
  4593. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP);
  4594. for i := 0 to Pred(l) do begin
  4595. case vct[i] of
  4596. ctCreate : FRecorder.recordCreation(vobj[i]);
  4597. ctChange : FRecorder.recordChange(vobj[i],vobj[i].getProperty(s_integer_prop));
  4598. ctDelete : FRecorder.recordDeletion(vobj[i]);
  4599. end;
  4600. end;
  4601. ls := FChangeSummary.getChangedDataObjects();
  4602. CheckEquals(l,ls.size());
  4603. for i := 0 to Pred(l) do begin
  4604. j := IndexOf(vobj[i],ls);
  4605. Check( ( j >= 0 ) );
  4606. CheckEquals(Ord(vct[i]), Ord(ls.getType(j)));
  4607. end;
  4608. finally
  4609. SetLength(vct,0);
  4610. SetLength(vobj,0);
  4611. end;
  4612. end;
  4613. end;
  4614. procedure TSDOChangeSummary_Test.getOldValues();
  4615. var
  4616. locObjA, locObjB : ISDODataObject;
  4617. ls : ISDOSettingList;
  4618. locPropInt, locPropString : ISDOProperty;
  4619. begin
  4620. locPropInt := FFactory.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  4621. locPropString := FFactory.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  4622. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  4623. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  4624. FChangeSummary.beginLogging();
  4625. ls := FChangeSummary.getOldValues(locObjA);
  4626. CheckEquals(0, ls.size());
  4627. ls := FChangeSummary.getOldValues(locObjB);
  4628. CheckEquals(0, ls.size());
  4629. locObjA.setInteger(locPropInt,1210);
  4630. FRecorder.recordChange(locObjA,locPropInt);
  4631. ls := FChangeSummary.getOldValues(locObjA);
  4632. CheckEquals(1,ls.size());
  4633. locObjB.setInteger(locPropInt,1210);
  4634. FRecorder.recordChange(locObjB,locPropInt);
  4635. ls := FChangeSummary.getOldValues(locObjA);
  4636. CheckEquals(1,ls.size());
  4637. ls := FChangeSummary.getOldValues(locObjB);
  4638. CheckEquals(1,ls.size());
  4639. locObjA.setString(locPropString,RandomString(1000));
  4640. FRecorder.recordChange(locObjA,locPropString);
  4641. ls := FChangeSummary.getOldValues(locObjA);
  4642. CheckEquals(2,ls.size());
  4643. ls := FChangeSummary.getOldValues(locObjB);
  4644. CheckEquals(1,ls.size());
  4645. locObjB.setString(locPropString,RandomString(1000));
  4646. FRecorder.recordChange(locObjB,locPropString);
  4647. ls := FChangeSummary.getOldValues(locObjA);
  4648. CheckEquals(2,ls.size());
  4649. ls := FChangeSummary.getOldValues(locObjB);
  4650. CheckEquals(2,ls.size());
  4651. end;
  4652. procedure TSDOChangeSummary_Test.getOldValue();
  4653. var
  4654. locObjA, locObjB : ISDODataObject;
  4655. locPropInt, locPropString : ISDOProperty;
  4656. locSetting : TValueSetting;
  4657. begin
  4658. locPropInt := FFactory.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  4659. locPropString := FFactory.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  4660. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  4661. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  4662. FChangeSummary.beginLogging();
  4663. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locPropInt)));
  4664. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locPropString)));
  4665. locObjA.setInteger(locPropInt,1210);
  4666. FRecorder.recordChange(locObjA,locPropInt);
  4667. locSetting := FChangeSummary.getOldValue(locObjA,locPropInt);
  4668. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  4669. CheckEquals(PtrUInt(locPropInt), PtrUInt(locSetting.getProperty()));
  4670. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locPropString)));
  4671. locObjB.setInteger(locPropInt,1210);
  4672. FRecorder.recordChange(locObjB,locPropInt);
  4673. locSetting := FChangeSummary.getOldValue(locObjB,locPropInt);
  4674. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  4675. CheckEquals(PtrUInt(locPropInt), PtrUInt(locSetting.getProperty()));
  4676. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjB,locPropString)));
  4677. locObjA.setString(locPropString,RandomString(1000));
  4678. FRecorder.recordChange(locObjA,locPropString);
  4679. locSetting := FChangeSummary.getOldValue(locObjA,locPropInt);
  4680. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  4681. CheckEquals(PtrUInt(locPropInt), PtrUInt(locSetting.getProperty()));
  4682. locSetting := FChangeSummary.getOldValue(locObjA,locPropString);
  4683. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  4684. CheckEquals(PtrUInt(locPropString), PtrUInt(locSetting.getProperty()));
  4685. locObjB.setString(locPropString,RandomString(1000));
  4686. FRecorder.recordChange(locObjB,locPropString);
  4687. locSetting := FChangeSummary.getOldValue(locObjB,locPropInt);
  4688. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  4689. CheckEquals(PtrUInt(locPropInt), PtrUInt(locSetting.getProperty()));
  4690. locSetting := FChangeSummary.getOldValue(locObjB,locPropString);
  4691. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  4692. CheckEquals(PtrUInt(locPropString), PtrUInt(locSetting.getProperty()));
  4693. end;
  4694. type TAccesMode = ( amShallow, amDeep );
  4695. function find(
  4696. const ADataObject : ISDODataObject;
  4697. const AList : ISDOChangedDataObjectList;
  4698. const ACompareMode : TAccesMode
  4699. ) : Integer;
  4700. var
  4701. i, c : PtrInt;
  4702. begin
  4703. Result := -1;
  4704. c := AList.size();
  4705. if ( c > 0 ) then begin
  4706. if ( ACompareMode = amShallow ) then begin
  4707. for i := 0 to Pred(c) do begin
  4708. if TSDOEqualityHelper.equalShallow(ADataObject,AList.getDataObject(i)) then begin
  4709. Result := i;
  4710. Break;
  4711. end;
  4712. end;
  4713. end else begin
  4714. for i := 0 to Pred(c) do begin
  4715. if TSDOEqualityHelper.equal(ADataObject,AList.getDataObject(i)) then begin
  4716. Result := i;
  4717. Break;
  4718. end;
  4719. end;
  4720. end;
  4721. end;
  4722. end;
  4723. procedure TSDOChangeSummary_Test.getOldContainer();
  4724. var
  4725. locA, locB, locB1, locC : ISDODataObject;
  4726. locCS : ISDOChangeSummary;
  4727. begin
  4728. locA := FFactoryX.createNew(s_uri,s_type_object_A);
  4729. locCS := locA.getChangeSummary();
  4730. locCS.beginLogging();
  4731. locB := FFactoryX.createNew(s_uri,s_type_object_B);
  4732. locB1 := FFactoryX.createNew(s_uri,s_type_object_B);
  4733. locC := FFactoryX.createNew(s_uri,s_type_object_C);
  4734. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
  4735. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locB)));
  4736. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locC)));
  4737. locA.setDataObject(s_object_prop,locB);
  4738. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
  4739. CheckEquals(PtrUInt(locA), PtrUInt(locCS.getOldContainer(locB)));
  4740. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locC)));
  4741. locA.setDataObject(s_object_prop,locB1);
  4742. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
  4743. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locB)), '"locB" should no longer be referenced by the ChangeSummary at this stade( create + delete = 0 ).');
  4744. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locC)));
  4745. locB1.setDataObject(s_object_prop,locC);
  4746. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
  4747. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locB)), '"locB" should no longer be referenced by the ChangeSummary at this stade( create + delete = 0 ).');
  4748. CheckEquals(PtrUInt(locB1), PtrUInt(locCS.getOldContainer(locC)));
  4749. locB1.setDataObject(s_object_prop,nil);
  4750. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
  4751. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locB)), '"locB" should no longer be referenced by the ChangeSummary at this stade( create + delete = 0 ).');
  4752. CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locC)), '"locC" should no longer be referenced by the ChangeSummary at this stade( create + delete = 0 ).');
  4753. end;
  4754. procedure TSDOChangeSummary_Test.getOldContainmentProperty();
  4755. procedure Check_dont_have_old_prop(const ADataObject : ISDODataObject; const ACS : ISDOChangeSummary);
  4756. var
  4757. ok : Boolean;
  4758. begin
  4759. ok := False;
  4760. try
  4761. ACS.getOldContainmentProperty(ADataObject);
  4762. except
  4763. on e : ESDOInvalidStateOperationException do
  4764. ok := True;
  4765. end;
  4766. Check(ok, 'this object should not have a Old Containment Property.');
  4767. end;
  4768. var
  4769. locA, locB, locB1, locC : ISDODataObject;
  4770. locCS : ISDOChangeSummary;
  4771. begin
  4772. locA := FFactoryX.createNew(s_uri,s_type_object_A);
  4773. locCS := locA.getChangeSummary();
  4774. locCS.beginLogging();
  4775. locB := FFactoryX.createNew(s_uri,s_type_object_B);
  4776. locB1 := FFactoryX.createNew(s_uri,s_type_object_B);
  4777. locC := FFactoryX.createNew(s_uri,s_type_object_C);
  4778. Check_dont_have_old_prop(locA,locCS);
  4779. Check_dont_have_old_prop(locB,locCS);
  4780. Check_dont_have_old_prop(locC,locCS);
  4781. locA.setDataObject(s_object_prop,locB);
  4782. Check_dont_have_old_prop(locA,locCS);
  4783. Check_dont_have_old_prop(locC,locCS);
  4784. locA.setDataObject(s_object_prop,locB1);
  4785. Check_dont_have_old_prop(locA,locCS);
  4786. Check_dont_have_old_prop(locB,locCS);
  4787. Check_dont_have_old_prop(locC,locCS);
  4788. locB1.setDataObject(s_object_prop,locC);
  4789. Check_dont_have_old_prop(locA,locCS);
  4790. Check_dont_have_old_prop(locB,locCS);
  4791. locB1.setDataObject(s_object_prop,nil);
  4792. Check_dont_have_old_prop(locA,locCS);
  4793. Check_dont_have_old_prop(locB,locCS);
  4794. Check_dont_have_old_prop(locC,locCS);
  4795. end;
  4796. class function TSDOChangeSummary_Test.Create_FactoryX(): ISDODataFactory;
  4797. var
  4798. locFactory : ISDODataFactory;
  4799. procedure Add_Objects(const AUri : string);
  4800. var
  4801. locObj : ISDOType;
  4802. begin
  4803. locFactory.AddType(AUri,s_type_object_C,[]);
  4804. locObj := locFactory.getType(AUri,s_type_object_C);
  4805. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  4806. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  4807. {$IFDEF HAS_SDO_BYTES}
  4808. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  4809. {$ENDIF HAS_SDO_BYTES}
  4810. {$IFDEF HAS_SDO_CHAR}
  4811. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  4812. {$ENDIF HAS_SDO_CHAR}
  4813. {$IFDEF HAS_SDO_CURRENCY}
  4814. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  4815. {$ENDIF HAS_SDO_CURRENCY}
  4816. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  4817. {$IFDEF HAS_SDO_DOUBLE}
  4818. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  4819. {$ENDIF HAS_SDO_DOUBLE}
  4820. {$IFDEF HAS_SDO_FLOAT}
  4821. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  4822. {$ENDIF HAS_SDO_FLOAT}
  4823. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  4824. {$IFDEF HAS_SDO_LONG}
  4825. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  4826. {$ENDIF HAS_SDO_LONG}
  4827. {$IFDEF HAS_SDO_SHORT}
  4828. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  4829. {$ENDIF HAS_SDO_SHORT}
  4830. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4831. locFactory.AddType(AUri,s_type_object_B,[]);
  4832. locObj := locFactory.getType(AUri,s_type_object_B);
  4833. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  4834. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  4835. {$IFDEF HAS_SDO_BYTES}
  4836. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  4837. {$ENDIF HAS_SDO_BYTES}
  4838. {$IFDEF HAS_SDO_CHAR}
  4839. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  4840. {$ENDIF HAS_SDO_CHAR}
  4841. {$IFDEF HAS_SDO_CURRENCY}
  4842. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  4843. {$ENDIF HAS_SDO_CURRENCY}
  4844. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  4845. {$IFDEF HAS_SDO_DOUBLE}
  4846. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  4847. {$ENDIF HAS_SDO_DOUBLE}
  4848. {$IFDEF HAS_SDO_FLOAT}
  4849. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  4850. {$ENDIF HAS_SDO_FLOAT}
  4851. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  4852. {$IFDEF HAS_SDO_LONG}
  4853. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  4854. {$ENDIF HAS_SDO_LONG}
  4855. {$IFDEF HAS_SDO_SHORT}
  4856. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  4857. {$ENDIF HAS_SDO_SHORT}
  4858. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4859. locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_C,[pfIsContainment]);
  4860. locFactory.AddType(AUri,s_type_object_A,[]);
  4861. locObj := locFactory.getType(AUri,s_type_object_A);
  4862. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  4863. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  4864. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  4865. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], [pfIsMany]);
  4866. {$IFDEF HAS_SDO_BYTES}
  4867. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  4868. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  4869. {$ENDIF HAS_SDO_BYTES}
  4870. {$IFDEF HAS_SDO_CHAR}
  4871. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  4872. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  4873. {$ENDIF HAS_SDO_CHAR}
  4874. {$IFDEF HAS_SDO_CURRENCY}
  4875. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  4876. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  4877. {$ENDIF HAS_SDO_CURRENCY}
  4878. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  4879. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], [pfIsMany]);
  4880. {$IFDEF HAS_SDO_DOUBLE}
  4881. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  4882. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  4883. {$ENDIF HAS_SDO_DOUBLE}
  4884. {$IFDEF HAS_SDO_FLOAT}
  4885. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  4886. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  4887. {$ENDIF HAS_SDO_FLOAT}
  4888. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  4889. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  4890. {$IFDEF HAS_SDO_LONG}
  4891. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  4892. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  4893. {$ENDIF HAS_SDO_LONG}
  4894. {$IFDEF HAS_SDO_SHORT}
  4895. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  4896. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  4897. {$ENDIF HAS_SDO_SHORT}
  4898. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4899. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  4900. locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_B,[pfIsContainment]);
  4901. locFactory.addProperty(locObj,s_object_ref_prop,s_uri,s_type_object_B,[]);
  4902. locFactory.addProperty(locObj,s_changesummary_prop,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  4903. end;
  4904. begin
  4905. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  4906. Add_Objects(s_uri);
  4907. Result := locFactory;
  4908. end;
  4909. procedure TSDOChangeSummary_Test.isDeleted_nested();
  4910. procedure Check_DeletedObject(const AObj : ISDODataObject; const AList : ISDOChangedDataObjectList);
  4911. var
  4912. i, c, locFoundIdx : PtrInt;
  4913. locFound : Boolean;
  4914. begin
  4915. Check( AList.size() > 0 );
  4916. c := AList.size();
  4917. locFoundIdx := -1;
  4918. locFound := False;
  4919. for i := 0 to Pred(c) do begin
  4920. if ( AList.getType(i) = ctDelete ) and ( AObj = AList.getDataObject(i) ) then begin
  4921. locFoundIdx := i;
  4922. locFound := True;
  4923. Break;
  4924. end;
  4925. end;
  4926. CheckEquals(True,locFound);
  4927. if ( locFoundIdx < Pred(c) ) then begin
  4928. locFound := False;
  4929. for i := Succ(locFoundIdx) to Pred(c) do begin
  4930. if ( AList.getType(i) = ctDelete ) and ( AObj = AList.getDataObject(i) ) then begin
  4931. locFound := True;
  4932. Break;
  4933. end;
  4934. end;
  4935. CheckEquals(False, locFound, 'There should be _only one copy_ of the deleted object.');
  4936. end;
  4937. end;
  4938. var
  4939. locA, locB, locC : ISDODataObject;
  4940. ls : ISDOChangedDataObjectList;
  4941. begin
  4942. locC := FFactoryX.createNew(s_uri,s_type_object_C);
  4943. locC.setInteger(s_integer_prop,RandomRange(-12345,12456));
  4944. locC.setString(s_string_prop,RandomString(1000));
  4945. locB := FFactoryX.createNew(s_uri,s_type_object_B);
  4946. locB.setInteger(s_integer_prop,RandomRange(-12345,12456));
  4947. locB.setString(s_string_prop,RandomString(1000));
  4948. locB.setDataObject(s_object_prop,locC);
  4949. locA := FFactoryX.createNew(s_uri,s_type_object_A);
  4950. locA.setInteger(s_integer_prop,RandomRange(-1210,1210));
  4951. locA.getList(s_integer_propList).append(RandomRange(-1210,1210));
  4952. locA.getList(s_integer_propList).append(RandomRange(-1210,1210));
  4953. locA.setString(s_string_prop,RandomString(1000));
  4954. locA.getList(s_string_propList).append(RandomString(1210));
  4955. locA.getList(s_string_propList).append(RandomString(1210));
  4956. locA.setDataObject(s_object_prop,locB);
  4957. FChangeSummary.beginLogging();
  4958. CheckEquals(False,FChangeSummary.isDeleted(locA));
  4959. CheckEquals(False,FChangeSummary.isDeleted(locB));
  4960. CheckEquals(False,FChangeSummary.isDeleted(locC));
  4961. FRecorder.recordDeletion(locB);
  4962. ls := FChangeSummary.getChangedDataObjects();
  4963. Check_DeletedObject(locB,ls);
  4964. FRecorder.recordDeletion(locA);
  4965. CheckEquals(True,FChangeSummary.isDeleted(locA));
  4966. CheckEquals(True,FChangeSummary.isDeleted(locB));
  4967. CheckEquals(True,FChangeSummary.isDeleted(locC));
  4968. ls := FChangeSummary.getChangedDataObjects();
  4969. Check_DeletedObject(locA,ls);
  4970. end;
  4971. procedure TSDOChangeSummary_Test.undoChanges_simple();
  4972. var
  4973. locObjA : ISDODataObject;
  4974. locPropBool, locPropInt, locPropString : ISDOProperty;
  4975. locSettingBool, locSettingInt, locSettingString : TValueSetting;
  4976. ibuffer : TSDOInteger;
  4977. sbuffer : TSDOString;
  4978. bbuffer : TSDOBoolean;
  4979. locCS : ISDOChangeSummary;
  4980. begin
  4981. locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
  4982. locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  4983. locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  4984. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  4985. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  4986. locObjA.setString(locPropString,RandomString(1000));
  4987. locSettingBool := nil;
  4988. locSettingInt := nil;
  4989. locSettingString := nil;
  4990. try
  4991. bbuffer := locObjA.getBoolean(locPropBool);
  4992. locSettingBool := TValueSetting.Create(locObjA.isSet(locPropBool),locObjA.isNull(locPropBool),bbuffer,locPropBool,0);
  4993. ibuffer := locObjA.getInteger(locPropInt);
  4994. locSettingInt := TValueSetting.Create(locObjA.isSet(locPropInt),locObjA.isNull(locPropInt),ibuffer,locPropInt,0);
  4995. sbuffer := locObjA.getString(locPropString);
  4996. locSettingString := TValueSetting.Create(locObjA.isSet(locPropString),locObjA.isNull(locPropString),sbuffer,locPropString,0);
  4997. locCS := locObjA.getChangeSummary();
  4998. locCS.beginLogging();
  4999. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5000. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5001. locObjA.setString(locPropString,RandomString(1000));
  5002. locCS.endLogging();
  5003. locCS.undoChanges();
  5004. CheckEquals(0,locCS.getChangedDataObjects().size());
  5005. check_value(locObjA,locPropBool,locSettingBool);
  5006. check_value(locObjA,locPropInt,locSettingInt);
  5007. check_value(locObjA,locPropString,locSettingString);
  5008. FreeAndNil(locSettingBool);
  5009. FreeAndNil(locSettingInt);
  5010. FreeAndNil(locSettingString);
  5011. bbuffer := locObjA.getBoolean(locPropBool);
  5012. locSettingBool := TValueSetting.Create(locObjA.isSet(locPropBool),locObjA.isNull(locPropBool),bbuffer,locPropBool,0);
  5013. ibuffer := locObjA.getInteger(locPropInt);
  5014. locSettingInt := TValueSetting.Create(locObjA.isSet(locPropInt),locObjA.isNull(locPropInt),ibuffer,locPropInt,0);
  5015. sbuffer := locObjA.getString(locPropString);
  5016. locSettingString := TValueSetting.Create(locObjA.isSet(locPropString),locObjA.isNull(locPropString),sbuffer,locPropString,0);
  5017. locCS := locObjA.getChangeSummary();
  5018. locCS.beginLogging();
  5019. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5020. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5021. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5022. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5023. locObjA.setString(locPropString,RandomString(1000));
  5024. locObjA.setString(locPropString,RandomString(1000));
  5025. locCS.endLogging();
  5026. locCS.undoChanges();
  5027. CheckEquals(0,locCS.getChangedDataObjects().size());
  5028. check_value(locObjA,locPropBool,locSettingBool);
  5029. check_value(locObjA,locPropInt,locSettingInt);
  5030. check_value(locObjA,locPropString,locSettingString);
  5031. finally
  5032. FreeAndNil(locSettingBool);
  5033. FreeAndNil(locSettingInt);
  5034. FreeAndNil(locSettingString);
  5035. end;
  5036. end;
  5037. procedure TSDOChangeSummary_Test.undoChanges_object_contained_startWith_OBJ_OBJ();
  5038. var
  5039. locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
  5040. locCS : ISDOChangeSummary;
  5041. begin
  5042. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5043. locObjA.setBoolean(s_bool_prop,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5044. locObjA.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5045. locObjA.setInteger(s_integer_prop,RandomRange(-1210,1210));
  5046. locObjA.setString(s_string_prop,RandomString(1000));
  5047. locB := FFactoryX.createNew(s_uri,s_type_object_B);
  5048. locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5049. locB.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5050. locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5051. locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
  5052. locObjA.setDataObject(s_object_prop,locB);
  5053. locBB := FFactoryX.createNew(s_uri,s_type_object_B);
  5054. locBB.setBoolean(locBB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5055. locBB.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5056. locBB.setInteger(locBB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5057. locBB.setString(locBB.getProperty(s_string_prop),RandomString(1210));
  5058. locA1 := TSDOCopyHelper.copy(locObjA);
  5059. locB1 := TSDOCopyHelper.copy(locB);
  5060. locCS := locObjA.getChangeSummary();
  5061. locCS.beginLogging();
  5062. locObjA.setBoolean(s_bool_prop,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5063. locObjA.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5064. locObjA.setInteger(s_integer_prop,RandomRange(-1210,1210));
  5065. locObjA.setString(s_string_prop,RandomString(1000));
  5066. locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5067. locB.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5068. locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5069. locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
  5070. locObjA.setDataObject(s_object_prop,locBB);
  5071. locCS.endLogging();
  5072. locCS.undoChanges();
  5073. CheckEquals(0,locCS.getChangedDataObjects().size());
  5074. Check(TSDOEqualityHelper.equal(locObjA,locA1));
  5075. Check(TSDOEqualityHelper.equal(locObjA.getDataObject(s_object_prop),locB1));
  5076. end;
  5077. procedure TSDOChangeSummary_Test.undoChanges_object_contained_startWith_NIL_OBJ_OBJ();
  5078. var
  5079. locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
  5080. locPropBool, locPropInt, locPropString, locPropObj_propB : ISDOProperty;
  5081. locCS : ISDOChangeSummary;
  5082. begin
  5083. locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
  5084. locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  5085. locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  5086. locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
  5087. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5088. locB := FFactoryX.createNew(s_uri,s_type_object_B);
  5089. locA1 := TSDOCopyHelper.copy(locObjA);
  5090. locB1 := TSDOCopyHelper.copy(locB);
  5091. locCS := locObjA.getChangeSummary();
  5092. locCS.beginLogging();
  5093. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5094. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5095. locObjA.setString(locPropString,RandomString(1000));
  5096. locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5097. locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5098. locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
  5099. locObjA.setDataObject(locPropObj_propB,locB);
  5100. locBB := locObjA.createDataObject(s_object_prop);
  5101. locBB.setBoolean(locBB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5102. locBB.setInteger(locBB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5103. locBB.setString(locBB.getProperty(s_string_prop),RandomString(1210));
  5104. locCS.endLogging();
  5105. locCS.undoChanges();
  5106. CheckEquals(0,locCS.getChangedDataObjects().size());
  5107. Check(TSDOEqualityHelper.equal(locObjA,locA1));
  5108. Check(TSDOEqualityHelper.equal(locObjA.getDataObject(locPropObj_propB),nil));
  5109. end;
  5110. procedure TSDOChangeSummary_Test.getOldXpath();
  5111. var
  5112. locObjA, locB, locC, locBB : ISDODataObject;
  5113. locPropObj_propB : ISDOProperty;
  5114. locCS : ISDOChangeSummary;
  5115. begin
  5116. locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
  5117. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5118. locB := FFactoryX.createNew(s_uri,s_type_object_B);
  5119. locCS := locObjA.getChangeSummary();
  5120. locCS.beginLogging();
  5121. CheckEquals('',locCS.getOldXpath(locObjA));
  5122. CheckEquals('',locCS.getOldXpath(locB));
  5123. locObjA.setDataObject(locPropObj_propB,locB);
  5124. CheckEquals('',locCS.getOldXpath(locObjA));
  5125. CheckEquals('',locCS.getOldXpath(locB));
  5126. locBB := locObjA.createDataObject(locPropObj_propB);
  5127. CheckEquals('',locCS.getOldXpath(locObjA));
  5128. CheckEquals('',locCS.getOldXpath(locB));
  5129. CheckEquals('',locCS.getOldXpath(locBB));
  5130. locC := locBB.createDataObject(s_object_prop);
  5131. CheckEquals('',locCS.getOldXpath(locC));
  5132. locBB.setDataObject(s_object_prop,nil);
  5133. CheckEquals('',locCS.getOldXpath(locB));
  5134. CheckEquals('',locCS.getOldXpath(locC));
  5135. end;
  5136. procedure TSDOChangeSummary_Test.logging_state_2();
  5137. var
  5138. locObj : ISDODataObject;
  5139. begin
  5140. locObj := FFactory.createNew(s_uri,s_type_object_A);
  5141. FChangeSummary.beginLogging();
  5142. FRecorder.recordCreation(locObj);
  5143. Check(FChangeSummary.getChangedDataObjects().size() > 0);
  5144. FChangeSummary.endLogging();
  5145. Check(FChangeSummary.getChangedDataObjects().size() > 0);
  5146. FChangeSummary.beginLogging();
  5147. CheckEquals(0,FChangeSummary.getChangedDataObjects().size(), 'After beginLoggin->endLogging->begginLoggin the changes list must be empty');
  5148. end;
  5149. procedure TSDOChangeSummary_Test.check_value(
  5150. const AObj: ISDODataObject;
  5151. const AProp: ISDOProperty;
  5152. const AValue: TValueSetting
  5153. );
  5154. begin
  5155. CheckEquals(AValue.isSet(), AObj.isSet(AProp));
  5156. CheckEquals(AValue.isNull(), AObj.isNull(AProp));
  5157. if not AValue.isNull() then begin
  5158. case AProp.getTypeEnum() of
  5159. BooleanType : CheckEquals(AValue.getBooleanValue(), AObj.getBoolean(AProp));
  5160. ByteType : CheckEquals(AValue.getByteValue(), AObj.getByte(AProp));
  5161. {$IFDEF HAS_SDO_BYTES}
  5162. BytesType : CheckEquals(AValue.getBytesValue(), AObj.getBytes(AProp));
  5163. {$ENDIF HAS_SDO_BYTES}
  5164. {$IFDEF HAS_SDO_CHAR}
  5165. CharacterType: CheckEquals(AValue.getCharacterValue(), AObj.getCharacter(AProp));
  5166. {$ENDIF HAS_SDO_CHAR}
  5167. {$IFDEF HAS_SDO_CURRENCY}
  5168. CurrencyType : CheckEquals(AValue.getCurrencyValue(), AObj.getCurrency(AProp));
  5169. {$ENDIF HAS_SDO_CURRENCY}
  5170. DateTimeType : CheckEquals(AValue.getDateValue(), AObj.getDate(AProp));
  5171. {$IFDEF HAS_SDO_DOUBLE}
  5172. DoubleType : CheckEquals(AValue.getDoubleValue(), AObj.getDouble(AProp));
  5173. {$ENDIF HAS_SDO_DOUBLE}
  5174. {$IFDEF HAS_SDO_FLOAT}
  5175. FloatType : CheckEquals(AValue.getFloatValue(), AObj.getFloat(AProp));
  5176. {$ENDIF HAS_SDO_FLOAT}
  5177. IntegerType : CheckEquals(AValue.getIntegerValue(), AObj.getInteger(AProp));
  5178. {$IFDEF HAS_SDO_LONG}
  5179. LongType : CheckEquals(AValue.getLongValue(), AObj.getLong(AProp));
  5180. {$ENDIF HAS_SDO_LONG}
  5181. {$IFDEF HAS_SDO_SHORT}
  5182. ShortType : CheckEquals(AValue.getShortValue(), AObj.getShort(AProp));
  5183. {$ENDIF HAS_SDO_SHORT}
  5184. ObjectType : Check(TSDOEqualityHelper.equal(AValue.getDataObjectValue(),AObj.getDataObject(AProp)));
  5185. StringType : CheckEquals(AValue.getStringValue(), AObj.getString(AProp));
  5186. else
  5187. Assert(False,'NOT implemented.');
  5188. end;
  5189. end;
  5190. end;
  5191. procedure TSDOChangeSummary_Test.undoChanges_simple_unset();
  5192. var
  5193. locObjA : ISDODataObject;
  5194. locPropBool, locPropInt, locPropString : ISDOProperty;
  5195. locSettingBool, locSettingInt, locSettingString : TValueSetting;
  5196. ibuffer : TSDOInteger;
  5197. sbuffer : TSDOString;
  5198. bbuffer : TSDOBoolean;
  5199. locCS : ISDOChangeSummary;
  5200. begin
  5201. locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
  5202. locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  5203. locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  5204. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5205. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5206. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5207. locObjA.setString(locPropString,RandomString(1000));
  5208. locSettingBool := nil;
  5209. locSettingInt := nil;
  5210. locSettingString := nil;
  5211. try
  5212. bbuffer := locObjA.getBoolean(locPropBool);
  5213. locSettingBool := TValueSetting.Create(locObjA.isSet(locPropBool),locObjA.isNull(locPropBool),bbuffer,locPropBool,0);
  5214. ibuffer := locObjA.getInteger(locPropInt);
  5215. locSettingInt := TValueSetting.Create(locObjA.isSet(locPropInt),locObjA.isNull(locPropInt),ibuffer,locPropInt,0);
  5216. sbuffer := locObjA.getString(locPropString);
  5217. locSettingString := TValueSetting.Create(locObjA.isSet(locPropString),locObjA.isNull(locPropString),sbuffer,locPropString,0);
  5218. locCS := locObjA.getChangeSummary();
  5219. locCS.beginLogging();
  5220. locObjA.unset(locPropBool);
  5221. locObjA.unset(locPropInt);
  5222. locObjA.unset(locPropString);
  5223. locCS.endLogging();
  5224. locCS.undoChanges();
  5225. CheckEquals(0,locCS.getChangedDataObjects().size());
  5226. check_value(locObjA,locPropBool,locSettingBool);
  5227. check_value(locObjA,locPropInt,locSettingInt);
  5228. check_value(locObjA,locPropString,locSettingString);
  5229. finally
  5230. FreeAndNil(locSettingBool);
  5231. FreeAndNil(locSettingInt);
  5232. FreeAndNil(locSettingString);
  5233. end;
  5234. end;
  5235. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull();
  5236. var
  5237. locObjA : ISDODataObject;
  5238. locPropBool, locPropInt, locPropString : ISDOProperty;
  5239. locSettingBool, locSettingInt, locSettingString : TValueSetting;
  5240. ibuffer : TSDOInteger;
  5241. sbuffer : TSDOString;
  5242. bbuffer : TSDOBoolean;
  5243. locCS : ISDOChangeSummary;
  5244. begin
  5245. locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
  5246. locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  5247. locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  5248. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5249. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5250. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5251. locObjA.setString(locPropString,RandomString(1000));
  5252. locSettingBool := nil;
  5253. locSettingInt := nil;
  5254. locSettingString := nil;
  5255. try
  5256. bbuffer := locObjA.getBoolean(locPropBool);
  5257. locSettingBool := TValueSetting.Create(locObjA.isSet(locPropBool),locObjA.isNull(locPropBool),bbuffer,locPropBool,0);
  5258. ibuffer := locObjA.getInteger(locPropInt);
  5259. locSettingInt := TValueSetting.Create(locObjA.isSet(locPropInt),locObjA.isNull(locPropInt),ibuffer,locPropInt,0);
  5260. sbuffer := locObjA.getString(locPropString);
  5261. locSettingString := TValueSetting.Create(locObjA.isSet(locPropString),locObjA.isNull(locPropString),sbuffer,locPropString,0);
  5262. locCS := locObjA.getChangeSummary();
  5263. locCS.beginLogging();
  5264. locObjA.setNull(locPropBool);
  5265. locObjA.setNull(locPropInt);
  5266. locObjA.setNull(locPropString);
  5267. locCS.endLogging();
  5268. locCS.undoChanges();
  5269. CheckEquals(0,locCS.getChangedDataObjects().size());
  5270. check_value(locObjA,locPropBool,locSettingBool);
  5271. check_value(locObjA,locPropInt,locSettingInt);
  5272. check_value(locObjA,locPropString,locSettingString);
  5273. finally
  5274. FreeAndNil(locSettingBool);
  5275. FreeAndNil(locSettingInt);
  5276. FreeAndNil(locSettingString);
  5277. end;
  5278. end;
  5279. procedure TSDOChangeSummary_Test.getOldValue_object_prop();
  5280. var
  5281. locObj1, locObj2 : ISDODataObject;
  5282. locPropCont, locPropRef : ISDOProperty;
  5283. locSetting : TValueSetting;
  5284. begin
  5285. locPropCont := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
  5286. locPropRef := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_ref_prop);
  5287. locObj1 := FFactoryX.createNew(s_uri,s_type_object_A);
  5288. locObj2 := FFactoryX.createNew(s_uri,s_type_object_A);
  5289. FChangeSummary.beginLogging();
  5290. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObj1,locPropCont)));
  5291. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObj1,locPropRef)));
  5292. locObj1.setDataObject(locPropCont,FFactoryX.createNew(s_uri,s_type_object_B));
  5293. FRecorder.recordChange(locObj1,locPropCont);
  5294. locSetting := FChangeSummary.getOldValue(locObj1,locPropCont);
  5295. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  5296. CheckEquals(PtrUInt(locPropCont), PtrUInt(locSetting.getProperty()));
  5297. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObj1,locPropRef)));
  5298. locObj2.setDataObject(locPropCont,FFactoryX.createNew(s_uri,s_type_object_B));
  5299. FRecorder.recordChange(locObj2,locPropCont);
  5300. locSetting := FChangeSummary.getOldValue(locObj2,locPropCont);
  5301. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  5302. CheckEquals(PtrUInt(locPropCont), PtrUInt(locSetting.getProperty()));
  5303. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObj2,locPropRef)));
  5304. locObj1.setDataObject(locPropRef,FFactoryX.createNew(s_uri,s_type_object_B));
  5305. FRecorder.recordChange(locObj1,locPropRef);
  5306. locSetting := FChangeSummary.getOldValue(locObj1,locPropCont);
  5307. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  5308. CheckEquals(PtrUInt(locPropCont), PtrUInt(locSetting.getProperty()));
  5309. locSetting := FChangeSummary.getOldValue(locObj1,locPropRef);
  5310. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  5311. CheckEquals(PtrUInt(locPropRef), PtrUInt(locSetting.getProperty()));
  5312. locObj2.setDataObject(locPropRef,FFactoryX.createNew(s_uri,s_type_object_B));
  5313. FRecorder.recordChange(locObj2,locPropRef);
  5314. locSetting := FChangeSummary.getOldValue(locObj2,locPropCont);
  5315. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  5316. CheckEquals(PtrUInt(locPropCont), PtrUInt(locSetting.getProperty()));
  5317. locSetting := FChangeSummary.getOldValue(locObj2,locPropRef);
  5318. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  5319. CheckEquals(PtrUInt(locPropRef), PtrUInt(locSetting.getProperty()));
  5320. end;
  5321. procedure TSDOChangeSummary_Test.getOldValues_object_prop();
  5322. var
  5323. locObjA, locObjB : ISDODataObject;
  5324. ls : ISDOSettingList;
  5325. locPropInt, locPropString, locPropObjCont, locPropObjRef : ISDOProperty;
  5326. begin
  5327. locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  5328. locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  5329. locPropObjCont := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
  5330. locPropObjRef := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_ref_prop);
  5331. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5332. locObjB := FFactoryX.createNew(s_uri,s_type_object_A);
  5333. FChangeSummary.beginLogging();
  5334. ls := FChangeSummary.getOldValues(locObjA);
  5335. CheckEquals(0, ls.size());
  5336. ls := FChangeSummary.getOldValues(locObjB);
  5337. CheckEquals(0, ls.size());
  5338. locObjA.setInteger(locPropInt,1210);
  5339. FRecorder.recordChange(locObjA,locPropInt);
  5340. ls := FChangeSummary.getOldValues(locObjA);
  5341. CheckEquals(1,ls.size());
  5342. locObjB.setInteger(locPropInt,1210);
  5343. FRecorder.recordChange(locObjB,locPropInt);
  5344. ls := FChangeSummary.getOldValues(locObjA);
  5345. CheckEquals(1,ls.size());
  5346. ls := FChangeSummary.getOldValues(locObjB);
  5347. CheckEquals(1,ls.size());
  5348. locObjA.setString(locPropString,RandomString(1000));
  5349. FRecorder.recordChange(locObjA,locPropString);
  5350. ls := FChangeSummary.getOldValues(locObjA);
  5351. CheckEquals(2,ls.size());
  5352. ls := FChangeSummary.getOldValues(locObjB);
  5353. CheckEquals(1,ls.size());
  5354. locObjB.setString(locPropString,RandomString(1000));
  5355. FRecorder.recordChange(locObjB,locPropString);
  5356. ls := FChangeSummary.getOldValues(locObjA);
  5357. CheckEquals(2,ls.size());
  5358. ls := FChangeSummary.getOldValues(locObjB);
  5359. CheckEquals(2,ls.size());
  5360. locObjA.setDataObject(locPropObjCont,FFactoryX.createNew(s_uri,s_type_object_B));
  5361. FRecorder.recordChange(locObjA,locPropObjCont);
  5362. ls := FChangeSummary.getOldValues(locObjA);
  5363. CheckEquals(3,ls.size());
  5364. ls := FChangeSummary.getOldValues(locObjB);
  5365. CheckEquals(2,ls.size());
  5366. locObjB.setDataObject(locPropObjCont,FFactoryX.createNew(s_uri,s_type_object_B));
  5367. FRecorder.recordChange(locObjB,locPropObjCont);
  5368. ls := FChangeSummary.getOldValues(locObjA);
  5369. CheckEquals(3,ls.size());
  5370. ls := FChangeSummary.getOldValues(locObjB);
  5371. CheckEquals(3,ls.size());
  5372. locObjA.setDataObject(locPropObjRef,FFactoryX.createNew(s_uri,s_type_object_B));
  5373. FRecorder.recordChange(locObjA,locPropObjRef);
  5374. ls := FChangeSummary.getOldValues(locObjA);
  5375. CheckEquals(4,ls.size());
  5376. ls := FChangeSummary.getOldValues(locObjB);
  5377. CheckEquals(3,ls.size());
  5378. locObjB.setDataObject(locPropObjRef,FFactoryX.createNew(s_uri,s_type_object_B));
  5379. FRecorder.recordChange(locObjB,locPropObjRef);
  5380. ls := FChangeSummary.getOldValues(locObjA);
  5381. CheckEquals(4,ls.size());
  5382. ls := FChangeSummary.getOldValues(locObjB);
  5383. CheckEquals(4,ls.size());
  5384. end;
  5385. procedure TSDOChangeSummary_Test.undoChanges_object_referenced_startWIth_OBJ_OBJ();
  5386. var
  5387. locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
  5388. locPropBool, locPropInt, locPropString, locPropObj_propB : ISDOProperty;
  5389. locCS : ISDOChangeSummary;
  5390. begin
  5391. locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
  5392. locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  5393. locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  5394. locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_ref_prop);
  5395. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5396. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5397. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5398. locObjA.setString(locPropString,RandomString(1000));
  5399. locB := (*the object must be in the containment tree*)
  5400. locObjA.createDataObject(s_object_prop);
  5401. locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5402. locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5403. locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
  5404. (* This is necessary because locObjA.createDataObject(s_object_prop) is for "s_object_prop" not for "s_object_ref_prop"*)
  5405. locObjA.setDataObject(locPropObj_propB,locB);
  5406. locBB := FFactoryX.createNew(s_uri,s_type_object_B);
  5407. locBB.setBoolean(locBB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5408. locBB.setInteger(locBB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5409. locBB.setString(locBB.getProperty(s_string_prop),RandomString(1210));
  5410. locA1 := TSDOCopyHelper.copy(locObjA);
  5411. locB1 := TSDOCopyHelper.copy(locB);
  5412. locCS := locObjA.getChangeSummary();
  5413. locCS.beginLogging();
  5414. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5415. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5416. locObjA.setString(locPropString,RandomString(1000));
  5417. locObjA.setDataObject(locPropObj_propB,locBB);
  5418. locCS.endLogging();
  5419. locCS.undoChanges();
  5420. CheckEquals(0,locCS.getChangedDataObjects().size());
  5421. //Check(TSDOEqualityHelper.equal(locObjA,locA1));
  5422. CheckEquals(PtrUInt(locObjA.getDataObject(s_object_prop)), PtrUInt(locObjA.getDataObject(locPropObj_propB)));
  5423. //Check(TSDOEqualityHelper.equal(locObjA.getDataObject(locPropObj_propB),locB1));
  5424. end;
  5425. procedure TSDOChangeSummary_Test.undoChanges_object_referenced_startWith_NIL_OBJ();
  5426. var
  5427. locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
  5428. locPropBool, locPropInt, locPropString, locPropObj_propB : ISDOProperty;
  5429. locCS : ISDOChangeSummary;
  5430. begin
  5431. locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
  5432. locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  5433. locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  5434. locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_ref_prop);
  5435. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5436. locBB := (*the object must be in the containment tree*)
  5437. locObjA.createDataObject(s_object_prop);
  5438. locA1 := TSDOCopyHelper.copy(locObjA);
  5439. locB1 := TSDOCopyHelper.copy(locB);
  5440. locCS := locObjA.getChangeSummary();
  5441. locCS.beginLogging();
  5442. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5443. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5444. locObjA.setString(locPropString,RandomString(1000));
  5445. locObjA.setDataObject(locPropObj_propB,locB);
  5446. locObjA.setDataObject(locPropObj_propB,locBB);
  5447. locCS.endLogging();
  5448. locCS.undoChanges();
  5449. CheckEquals(0,locCS.getChangedDataObjects().size());
  5450. Check(TSDOEqualityHelper.equal(locObjA,locA1));
  5451. Check(TSDOEqualityHelper.equal(locObjA.getDataObject(locPropObj_propB),nil));
  5452. end;
  5453. procedure TSDOChangeSummary_Test.undoChanges_object_contained_startWith_OBJ_OBJ_OBJ();
  5454. var
  5455. locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
  5456. locPropBool, locPropInt, locPropString, locPropObj_propB : ISDOProperty;
  5457. locCS : ISDOChangeSummary;
  5458. begin
  5459. locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
  5460. locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
  5461. locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
  5462. locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
  5463. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5464. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5465. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5466. locObjA.setString(locPropString,RandomString(1000));
  5467. locB := FFactoryX.createNew(s_uri,s_type_object_B);
  5468. locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5469. locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5470. locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
  5471. locObjA.setDataObject(locPropObj_propB,locB);
  5472. locBB := FFactoryX.createNew(s_uri,s_type_object_B);
  5473. locBB.setBoolean(locBB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5474. locBB.setInteger(locBB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5475. locBB.setString(locBB.getProperty(s_string_prop),RandomString(1210));
  5476. locA1 := TSDOCopyHelper.copy(locObjA);
  5477. locB1 := TSDOCopyHelper.copy(locB);
  5478. locCS := locObjA.getChangeSummary();
  5479. locCS.beginLogging();
  5480. locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
  5481. locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
  5482. locObjA.setString(locPropString,RandomString(1000));
  5483. {locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
  5484. locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
  5485. locB.setString(locB.getProperty(s_string_prop),RandomString(1210)); }
  5486. locObjA.setDataObject(locPropObj_propB,locBB);
  5487. locObjA.createDataObject(locPropObj_propB);
  5488. locCS.endLogging();
  5489. locCS.undoChanges();
  5490. CheckEquals(0,locCS.getChangedDataObjects().size());
  5491. Check(TSDOEqualityHelper.equal(locObjA,locA1));
  5492. Check(TSDOEqualityHelper.equal(locObjA.getDataObject(locPropObj_propB),locB1));
  5493. end;
  5494. procedure TSDOChangeSummary_Test.isCreated_create_delete();
  5495. var
  5496. locObj : ISDODataObject;
  5497. begin
  5498. locObj := FFactory.createNew(s_uri,s_type_object_A);
  5499. FChangeSummary.beginLogging();
  5500. CheckEquals(False,FChangeSummary.isCreated(nil));
  5501. CheckEquals(False,FChangeSummary.isCreated(locObj));
  5502. FRecorder.recordCreation(locObj);
  5503. CheckEquals(True,FChangeSummary.isCreated(locObj));
  5504. FRecorder.recordDeletion(locObj);
  5505. CheckEquals(False,FChangeSummary.isDeleted(locObj));
  5506. end;
  5507. procedure TSDOChangeSummary_Test.undoChanges_delete_contained_object();
  5508. var
  5509. locA, locB0, locB1, locC0, locC1 : ISDODataObject;
  5510. locCopyA : ISDODataObject;
  5511. locCS : ISDOChangeSummary;
  5512. begin
  5513. locA := FFactoryX.createNew(s_uri,s_type_object_A);
  5514. locA.setString(s_string_prop,RandomString(1000));
  5515. locB0 := locA.createDataObject(s_object_prop);
  5516. locB0.setString(s_string_prop,RandomString(1000));
  5517. locC0 := locB0.createDataObject(s_object_prop);
  5518. locC0.setString(s_string_prop,RandomString(1000));
  5519. locCopyA := TSDOCopyHelper.copy(locA);
  5520. locCS := locA.getChangeSummary();
  5521. locCS.beginLogging();
  5522. locB1 := locA.createDataObject(s_object_prop);
  5523. locB1.setString(s_string_prop,RandomString(1000));
  5524. locC1 := locB1.createDataObject(s_object_prop);
  5525. locC1.setString(s_string_prop,RandomString(1000));
  5526. locCS.endLogging();
  5527. locCS.undoChanges();
  5528. CheckEquals(0,locCS.getChangedDataObjects().size());
  5529. Check(TSDOEqualityHelper.equal(locCopyA,locA));
  5530. end;
  5531. procedure TSDOChangeSummary_Test.getOldXpath_1();
  5532. var
  5533. locObjA, locB, locBB : ISDODataObject;
  5534. locPropObj_propB : ISDOProperty;
  5535. locCS : ISDOChangeSummary;
  5536. begin
  5537. locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
  5538. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5539. locB := FFactoryX.createNew(s_uri,s_type_object_B);
  5540. locObjA.setDataObject(locPropObj_propB,locB);
  5541. locCS := locObjA.getChangeSummary();
  5542. locCS.beginLogging();
  5543. CheckEquals('',locCS.getOldXpath(locObjA));
  5544. CheckEquals('',locCS.getOldXpath(locB));
  5545. locBB := locObjA.createDataObject(locPropObj_propB);
  5546. CheckEquals('',locCS.getOldXpath(locObjA));
  5547. CheckEquals(locPropObj_propB.getName(),locCS.getOldXpath(locB));
  5548. CheckEquals('',locCS.getOldXpath(locBB));
  5549. locObjA.createDataObject(locPropObj_propB);
  5550. CheckEquals(locPropObj_propB.getName(),locCS.getOldXpath(locB));
  5551. end;
  5552. procedure TSDOChangeSummary_Test.getOldXpath_nested_deleted_object();
  5553. var
  5554. locFac : ISDODataFactory;
  5555. locA, locB, locBB, locC, locD : ISDODataObject;
  5556. locCS : ISDOChangeSummary;
  5557. begin
  5558. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5559. locFac.AddType(s_uri,'a',[]);
  5560. locFac.AddType(s_uri,'b',[]);
  5561. locFac.AddType(s_uri,'c',[]);
  5562. locFac.AddType(s_uri,'d',[]);
  5563. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  5564. locFac.addProperty(s_uri,'a','p_ac',s_uri,'c',[]);
  5565. locFac.addProperty(s_uri,'a','p_ad',s_uri,'d',[]);
  5566. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  5567. locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
  5568. locFac.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
  5569. locA := locFac.createNew(s_uri,'a');
  5570. locB := locA.createDataObject('p_ab');
  5571. locC := locB.createDataObject('p_bc');
  5572. locD := locC.createDataObject('p_cd');
  5573. locCS := locA.getChangeSummary();
  5574. locCS.beginLogging();
  5575. locBB := locA.createDataObject('p_ab');
  5576. CheckEquals('p_ab',locCS.getOldXpath(locB));
  5577. CheckEquals('p_ab/p_bc',locCS.getOldXpath(locC));
  5578. CheckEquals('p_ab/p_bc/p_cd',locCS.getOldXpath(locD));
  5579. end;
  5580. procedure TSDOChangeSummary_Test.getOldValues_created_object_settinglist_is_empty();
  5581. var
  5582. locA, locB : ISDODataObject;
  5583. locCS : ISDOChangeSummary;
  5584. begin
  5585. locA := FFactoryX.createNew(s_uri,s_type_object_A);
  5586. locCS := locA.getChangeSummary();
  5587. locCS.beginLogging();
  5588. locB := locA.createDataObject(s_object_prop);
  5589. locB.setInteger(s_integer_prop,1210);
  5590. locB.setString(s_string_prop, 'kis');
  5591. CheckEquals(0, locCS.getOldValues(locB).size());
  5592. end;
  5593. procedure TSDOChangeSummary_Test.getChangedDataObjects_contained_delete;
  5594. var
  5595. locFac : ISDODataFactory;
  5596. locA, locB, locC, locD : ISDODataObject;
  5597. locCS : ISDOChangeSummary;
  5598. i : PtrInt;
  5599. ls : ISDOChangedDataObjectList;
  5600. begin
  5601. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5602. locFac.AddType(s_uri,'a',[]);
  5603. locFac.AddType(s_uri,'b',[]);
  5604. locFac.AddType(s_uri,'c',[]);
  5605. locFac.AddType(s_uri,'d',[]);
  5606. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  5607. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  5608. locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
  5609. locFac.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
  5610. locFac.addProperty(s_uri,'d','p_int',sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  5611. locA := locFac.createNew(s_uri,'a');
  5612. locCS := locA.getChangeSummary();
  5613. locCS.endLogging();
  5614. locB := locA.createDataObject('p_ab');
  5615. locC := locB.createDataObject('p_bc');
  5616. locD := locC.createDataObject('p_cd');
  5617. locCS.beginLogging();
  5618. locD.setInteger('p_int',1210);
  5619. locA.setDataObject('p_ab',nil);
  5620. ls := locCS.getChangedDataObjects();
  5621. i := IndexOf(locD,ls);
  5622. Check( ( i < 0 ) or ( Ord(ls.getType(i)) = Ord(ctDelete) ) );
  5623. Check(locCS.isDeleted(locD));
  5624. end;
  5625. procedure TSDOChangeSummary_Test.getChangedDataObjects_multi_value_prop;
  5626. var
  5627. locFac : ISDODataFactory;
  5628. locA, locB : ISDODataObject;
  5629. locLs : ISDODataObjectList;
  5630. locCS : ISDOChangeSummary;
  5631. i : PtrInt;
  5632. ls : ISDOChangedDataObjectList;
  5633. begin
  5634. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5635. locFac.AddType(s_uri,'a',[]);
  5636. locFac.AddType(s_uri,'b',[]);
  5637. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment,pfIsMany]);
  5638. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  5639. locFac.addProperty(s_uri,'b','p_int',sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  5640. locA := locFac.createNew(s_uri,'a');
  5641. locCS := locA.getChangeSummary();
  5642. locCS.endLogging();
  5643. locLs := locA.getList('p_ab');
  5644. for i := 1 to 5 do begin
  5645. locB := locFac.createNew(s_uri,'b');
  5646. locB.setInteger('p_int',i);
  5647. locLs.append(locB);
  5648. end;
  5649. locCS.beginLogging();
  5650. locLs.delete(2);
  5651. locLs.delete(0);
  5652. ls := locCS.getChangedDataObjects();
  5653. CheckEquals(3, ls.size());
  5654. CheckEquals(Ord(ctChange), Ord(ls.getType(0)), 'a');
  5655. CheckEquals(Ord(ctDelete), Ord(ls.getType(1)), 'a.p_ab[2]');
  5656. CheckEquals(Ord(ctDelete), Ord(ls.getType(2)), 'a.p_ab[3]');
  5657. end;
  5658. procedure TSDOChangeSummary_Test.undoChanges_simple_bool();
  5659. const
  5660. LOCAL_PROP_NAME = s_bool_prop;
  5661. var
  5662. locObjA : ISDODataObject;
  5663. locProp : ISDOProperty;
  5664. locSetting : TValueSetting;
  5665. buffer : TSDOBoolean;
  5666. locCS : ISDOChangeSummary;
  5667. begin
  5668. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5669. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5670. locObjA.setBoolean(locProp,False);
  5671. locSetting := nil;
  5672. try
  5673. buffer := locObjA.getBoolean(locProp);
  5674. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5675. locCS := locObjA.getChangeSummary();
  5676. locCS.beginLogging();
  5677. locObjA.setBoolean(locProp,True);
  5678. locCS.endLogging();
  5679. locCS.undoChanges();
  5680. CheckEquals(0,locCS.getChangedDataObjects().size());
  5681. check_value(locObjA,locProp,locSetting);
  5682. FreeAndNil(locSetting);
  5683. buffer := locObjA.getBoolean(locProp);
  5684. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5685. locCS := locObjA.getChangeSummary();
  5686. locCS.beginLogging();
  5687. locObjA.setBoolean(locProp,True);
  5688. locObjA.setBoolean(locProp,False);
  5689. locCS.endLogging();
  5690. locCS.undoChanges();
  5691. CheckEquals(0,locCS.getChangedDataObjects().size());
  5692. check_value(locObjA,locProp,locSetting);
  5693. finally
  5694. FreeAndNil(locSetting);
  5695. end;
  5696. end;
  5697. procedure TSDOChangeSummary_Test.undoChanges_simple_byte();
  5698. const
  5699. LOCAL_PROP_NAME = s_byte_prop;
  5700. var
  5701. locObjA : ISDODataObject;
  5702. locProp : ISDOProperty;
  5703. locSetting : TValueSetting;
  5704. buffer : TSDOByte;
  5705. locCS : ISDOChangeSummary;
  5706. begin
  5707. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5708. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5709. locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5710. locSetting := nil;
  5711. try
  5712. buffer := locObjA.getByte(locProp);
  5713. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5714. locCS := locObjA.getChangeSummary();
  5715. locCS.beginLogging();
  5716. locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5717. locCS.endLogging();
  5718. locCS.undoChanges();
  5719. CheckEquals(0,locCS.getChangedDataObjects().size());
  5720. check_value(locObjA,locProp,locSetting);
  5721. FreeAndNil(locSetting);
  5722. buffer := locObjA.getByte(locProp);
  5723. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5724. locCS := locObjA.getChangeSummary();
  5725. locCS.beginLogging();
  5726. locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5727. locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5728. locCS.endLogging();
  5729. locCS.undoChanges();
  5730. CheckEquals(0,locCS.getChangedDataObjects().size());
  5731. check_value(locObjA,locProp,locSetting);
  5732. finally
  5733. FreeAndNil(locSetting);
  5734. end;
  5735. end;
  5736. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_bool();
  5737. const
  5738. LOCAL_PROP_NAME = s_bool_prop;
  5739. var
  5740. locObjA : ISDODataObject;
  5741. locProp : ISDOProperty;
  5742. locSetting : TValueSetting;
  5743. buffer : TSDOBoolean;
  5744. locCS : ISDOChangeSummary;
  5745. begin
  5746. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5747. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5748. locObjA.setBoolean(locProp,True);
  5749. locSetting := nil;
  5750. try
  5751. buffer := locObjA.getBoolean(locProp);
  5752. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5753. locCS := locObjA.getChangeSummary();
  5754. locCS.beginLogging();
  5755. locObjA.unset(locProp);
  5756. locCS.endLogging();
  5757. locCS.undoChanges();
  5758. CheckEquals(0,locCS.getChangedDataObjects().size());
  5759. check_value(locObjA,locProp,locSetting);
  5760. finally
  5761. FreeAndNil(locSetting);
  5762. end;
  5763. end;
  5764. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_byte();
  5765. const
  5766. LOCAL_PROP_NAME = s_byte_prop;
  5767. var
  5768. locObjA : ISDODataObject;
  5769. locProp : ISDOProperty;
  5770. locSetting : TValueSetting;
  5771. buffer : TSDOByte;
  5772. locCS : ISDOChangeSummary;
  5773. begin
  5774. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5775. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5776. locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5777. locSetting := nil;
  5778. try
  5779. buffer := locObjA.getByte(locProp);
  5780. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5781. locCS := locObjA.getChangeSummary();
  5782. locCS.beginLogging();
  5783. locObjA.unset(locProp);
  5784. locCS.endLogging();
  5785. locCS.undoChanges();
  5786. CheckEquals(0,locCS.getChangedDataObjects().size());
  5787. check_value(locObjA,locProp,locSetting);
  5788. finally
  5789. FreeAndNil(locSetting);
  5790. end;
  5791. end;
  5792. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_integer();
  5793. const
  5794. LOCAL_PROP_NAME = s_integer_prop;
  5795. var
  5796. locObjA : ISDODataObject;
  5797. locProp : ISDOProperty;
  5798. locSetting : TValueSetting;
  5799. buffer : TSDOInteger;
  5800. locCS : ISDOChangeSummary;
  5801. begin
  5802. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5803. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5804. locObjA.setInteger(locProp,456789);
  5805. locSetting := nil;
  5806. try
  5807. buffer := locObjA.getInteger(locProp);
  5808. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5809. locCS := locObjA.getChangeSummary();
  5810. locCS.beginLogging();
  5811. locObjA.unset(locProp);
  5812. locCS.endLogging();
  5813. locCS.undoChanges();
  5814. CheckEquals(0,locCS.getChangedDataObjects().size());
  5815. check_value(locObjA,locProp,locSetting);
  5816. finally
  5817. FreeAndNil(locSetting);
  5818. end;
  5819. end;
  5820. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_string();
  5821. const
  5822. LOCAL_PROP_NAME = s_string_prop;
  5823. var
  5824. locObjA : ISDODataObject;
  5825. locProp : ISDOProperty;
  5826. locSetting : TValueSetting;
  5827. buffer : TSDOString;
  5828. locCS : ISDOChangeSummary;
  5829. begin
  5830. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5831. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5832. locObjA.setString(locProp,'X-PASCAL');
  5833. locSetting := nil;
  5834. try
  5835. buffer := locObjA.getString(locProp);
  5836. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5837. locCS := locObjA.getChangeSummary();
  5838. locCS.beginLogging();
  5839. locObjA.unset(locProp);
  5840. locCS.endLogging();
  5841. locCS.undoChanges();
  5842. CheckEquals(0,locCS.getChangedDataObjects().size());
  5843. check_value(locObjA,locProp,locSetting);
  5844. finally
  5845. FreeAndNil(locSetting);
  5846. end;
  5847. end;
  5848. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_bool();
  5849. const
  5850. LOCAL_PROP_NAME = s_bool_prop;
  5851. var
  5852. locObjA : ISDODataObject;
  5853. locProp : ISDOProperty;
  5854. locSetting : TValueSetting;
  5855. buffer : TSDOBoolean;
  5856. locCS : ISDOChangeSummary;
  5857. begin
  5858. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5859. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5860. locObjA.setBoolean(locProp,True);
  5861. locSetting := nil;
  5862. try
  5863. buffer := locObjA.getBoolean(locProp);
  5864. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5865. locCS := locObjA.getChangeSummary();
  5866. locCS.beginLogging();
  5867. locObjA.setNull(locProp);
  5868. locCS.endLogging();
  5869. locCS.undoChanges();
  5870. CheckEquals(0,locCS.getChangedDataObjects().size());
  5871. check_value(locObjA,locProp,locSetting);
  5872. finally
  5873. FreeAndNil(locSetting);
  5874. end;
  5875. end;
  5876. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_byte();
  5877. const
  5878. LOCAL_PROP_NAME = s_byte_prop;
  5879. var
  5880. locObjA : ISDODataObject;
  5881. locProp : ISDOProperty;
  5882. locSetting : TValueSetting;
  5883. buffer : TSDOByte;
  5884. locCS : ISDOChangeSummary;
  5885. begin
  5886. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5887. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5888. locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
  5889. locSetting := nil;
  5890. try
  5891. buffer := locObjA.getByte(locProp);
  5892. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5893. locCS := locObjA.getChangeSummary();
  5894. locCS.beginLogging();
  5895. locObjA.setNull(locProp);
  5896. locCS.endLogging();
  5897. locCS.undoChanges();
  5898. CheckEquals(0,locCS.getChangedDataObjects().size());
  5899. check_value(locObjA,locProp,locSetting);
  5900. finally
  5901. FreeAndNil(locSetting);
  5902. end;
  5903. end;
  5904. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_integer();
  5905. const
  5906. LOCAL_PROP_NAME = s_integer_prop;
  5907. var
  5908. locObjA : ISDODataObject;
  5909. locProp : ISDOProperty;
  5910. locSetting : TValueSetting;
  5911. buffer : TSDOInteger;
  5912. locCS : ISDOChangeSummary;
  5913. begin
  5914. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5915. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5916. locObjA.setInteger(locProp,78910);
  5917. locSetting := nil;
  5918. try
  5919. buffer := locObjA.getInteger(locProp);
  5920. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5921. locCS := locObjA.getChangeSummary();
  5922. locCS.beginLogging();
  5923. locObjA.setNull(locProp);
  5924. locCS.endLogging();
  5925. locCS.undoChanges();
  5926. CheckEquals(0,locCS.getChangedDataObjects().size());
  5927. check_value(locObjA,locProp,locSetting);
  5928. finally
  5929. FreeAndNil(locSetting);
  5930. end;
  5931. end;
  5932. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_string();
  5933. const
  5934. LOCAL_PROP_NAME = s_string_prop;
  5935. var
  5936. locObjA : ISDODataObject;
  5937. locProp : ISDOProperty;
  5938. locSetting : TValueSetting;
  5939. buffer : TSDOString;
  5940. locCS : ISDOChangeSummary;
  5941. begin
  5942. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  5943. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  5944. locObjA.setString(locProp,'FGHJKLM');
  5945. locSetting := nil;
  5946. try
  5947. buffer := locObjA.getString(locProp);
  5948. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  5949. locCS := locObjA.getChangeSummary();
  5950. locCS.beginLogging();
  5951. locObjA.setNull(locProp);
  5952. locCS.endLogging();
  5953. locCS.undoChanges();
  5954. CheckEquals(0,locCS.getChangedDataObjects().size());
  5955. check_value(locObjA,locProp,locSetting);
  5956. finally
  5957. FreeAndNil(locSetting);
  5958. end;
  5959. end;
  5960. procedure TSDOChangeSummary_Test.getOldValues_bool();
  5961. const
  5962. VAL_1 : TSDOBoolean = False;
  5963. PROP_NAME = s_bool_prop;
  5964. var
  5965. locObjA, locObjB : ISDODataObject;
  5966. ls : ISDOSettingList;
  5967. locProp : ISDOProperty;
  5968. begin
  5969. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  5970. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  5971. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  5972. FChangeSummary.beginLogging();
  5973. ls := FChangeSummary.getOldValues(locObjA);
  5974. CheckEquals(0, ls.size());
  5975. ls := FChangeSummary.getOldValues(locObjB);
  5976. CheckEquals(0, ls.size());
  5977. locObjA.setBoolean(locProp,VAL_1);
  5978. FRecorder.recordChange(locObjA,locProp);
  5979. ls := FChangeSummary.getOldValues(locObjA);
  5980. CheckEquals(1,ls.size());
  5981. locObjB.setBoolean(locProp,VAL_1);
  5982. FRecorder.recordChange(locObjB,locProp);
  5983. ls := FChangeSummary.getOldValues(locObjA);
  5984. CheckEquals(1,ls.size());
  5985. ls := FChangeSummary.getOldValues(locObjB);
  5986. CheckEquals(1,ls.size());
  5987. end;
  5988. procedure TSDOChangeSummary_Test.getOldValues_byte();
  5989. const
  5990. VAL_1 : TSDOByte = 123;
  5991. PROP_NAME = s_byte_prop;
  5992. var
  5993. locObjA, locObjB : ISDODataObject;
  5994. ls : ISDOSettingList;
  5995. locProp : ISDOProperty;
  5996. begin
  5997. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  5998. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  5999. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6000. FChangeSummary.beginLogging();
  6001. ls := FChangeSummary.getOldValues(locObjA);
  6002. CheckEquals(0, ls.size());
  6003. ls := FChangeSummary.getOldValues(locObjB);
  6004. CheckEquals(0, ls.size());
  6005. locObjA.setByte(locProp,VAL_1);
  6006. FRecorder.recordChange(locObjA,locProp);
  6007. ls := FChangeSummary.getOldValues(locObjA);
  6008. CheckEquals(1,ls.size());
  6009. locObjB.setByte(locProp,VAL_1);
  6010. FRecorder.recordChange(locObjB,locProp);
  6011. ls := FChangeSummary.getOldValues(locObjA);
  6012. CheckEquals(1,ls.size());
  6013. ls := FChangeSummary.getOldValues(locObjB);
  6014. CheckEquals(1,ls.size());
  6015. end;
  6016. procedure TSDOChangeSummary_Test.getOldValue_bool();
  6017. const
  6018. VAL_1 : TSDOBoolean = True;
  6019. VAL_2 : TSDOBoolean = False;
  6020. PROP_NAME = s_bool_prop;
  6021. var
  6022. locObjA, locObjB : ISDODataObject;
  6023. locProp : ISDOProperty;
  6024. locSetting : TValueSetting;
  6025. begin
  6026. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6027. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6028. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6029. FChangeSummary.beginLogging();
  6030. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6031. locObjA.setBoolean(locProp,VAL_1);
  6032. FRecorder.recordChange(locObjA,locProp);
  6033. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6034. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6035. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6036. locObjB.setBoolean(locProp,VAL_2);
  6037. FRecorder.recordChange(locObjB,locProp);
  6038. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6039. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6040. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6041. end;
  6042. procedure TSDOChangeSummary_Test.getOldValue_byte();
  6043. const
  6044. VAL_1 : TSDOByte = 123;
  6045. VAL_2 : TSDOByte = 78;
  6046. PROP_NAME = s_byte_prop;
  6047. var
  6048. locObjA, locObjB : ISDODataObject;
  6049. locProp : ISDOProperty;
  6050. locSetting : TValueSetting;
  6051. begin
  6052. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6053. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6054. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6055. FChangeSummary.beginLogging();
  6056. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6057. locObjA.setByte(locProp,VAL_1);
  6058. FRecorder.recordChange(locObjA,locProp);
  6059. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6060. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6061. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6062. locObjB.setByte(locProp,VAL_2);
  6063. FRecorder.recordChange(locObjB,locProp);
  6064. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6065. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6066. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6067. end;
  6068. procedure TSDOChangeSummary_Test.getOldValues_date();
  6069. const
  6070. VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
  6071. VAL_2 : TSDODateTime = ( Date : 34567; HourOffset : 8; MinuteOffset : 9; );
  6072. var
  6073. locObjA, locObjB : ISDODataObject;
  6074. locProp : ISDOProperty;
  6075. locSetting : TValueSetting;
  6076. begin
  6077. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(s_date_prop);
  6078. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6079. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6080. FChangeSummary.beginLogging();
  6081. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6082. locObjA.setDate(locProp,VAL_1);
  6083. FRecorder.recordChange(locObjA,locProp);
  6084. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6085. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6086. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6087. locObjB.setDate(locProp,VAL_2);
  6088. FRecorder.recordChange(locObjB,locProp);
  6089. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6090. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6091. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6092. end;
  6093. procedure TSDOChangeSummary_Test.getOldValues_integer();
  6094. const
  6095. VAL_1 : TSDOInteger = 123456;
  6096. PROP_NAME = s_integer_prop;
  6097. var
  6098. locObjA, locObjB : ISDODataObject;
  6099. ls : ISDOSettingList;
  6100. locProp : ISDOProperty;
  6101. begin
  6102. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6103. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6104. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6105. FChangeSummary.beginLogging();
  6106. ls := FChangeSummary.getOldValues(locObjA);
  6107. CheckEquals(0, ls.size());
  6108. ls := FChangeSummary.getOldValues(locObjB);
  6109. CheckEquals(0, ls.size());
  6110. locObjA.setInteger(locProp,VAL_1);
  6111. FRecorder.recordChange(locObjA,locProp);
  6112. ls := FChangeSummary.getOldValues(locObjA);
  6113. CheckEquals(1,ls.size());
  6114. locObjB.setInteger(locProp,VAL_1);
  6115. FRecorder.recordChange(locObjB,locProp);
  6116. ls := FChangeSummary.getOldValues(locObjA);
  6117. CheckEquals(1,ls.size());
  6118. ls := FChangeSummary.getOldValues(locObjB);
  6119. CheckEquals(1,ls.size());
  6120. end;
  6121. procedure TSDOChangeSummary_Test.getOldValues_string();
  6122. const
  6123. VAL_1 : TSDOString = 'sdo.standart.AZERTY';
  6124. PROP_NAME = s_string_prop;
  6125. var
  6126. locObjA, locObjB : ISDODataObject;
  6127. ls : ISDOSettingList;
  6128. locProp : ISDOProperty;
  6129. begin
  6130. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6131. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6132. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6133. FChangeSummary.beginLogging();
  6134. ls := FChangeSummary.getOldValues(locObjA);
  6135. CheckEquals(0, ls.size());
  6136. ls := FChangeSummary.getOldValues(locObjB);
  6137. CheckEquals(0, ls.size());
  6138. locObjA.setString(locProp,VAL_1);
  6139. FRecorder.recordChange(locObjA,locProp);
  6140. ls := FChangeSummary.getOldValues(locObjA);
  6141. CheckEquals(1,ls.size());
  6142. locObjB.setString(locProp,VAL_1);
  6143. FRecorder.recordChange(locObjB,locProp);
  6144. ls := FChangeSummary.getOldValues(locObjA);
  6145. CheckEquals(1,ls.size());
  6146. ls := FChangeSummary.getOldValues(locObjB);
  6147. CheckEquals(1,ls.size());
  6148. end;
  6149. {$IFDEF HAS_SDO_BYTES}
  6150. procedure TSDOChangeSummary_Test.getOldValues_bytes();
  6151. const
  6152. PROP_NAME = s_bytes_prop;
  6153. var
  6154. VAL_1 : TSDOBytes;
  6155. procedure SetConstants();
  6156. var
  6157. v : TSDOBytes;
  6158. k : Integer;
  6159. begin
  6160. SetLength(v,10);
  6161. for k := 0 to High(v) do
  6162. v[k] := k mod High(TSDOByte);
  6163. VAL_1 := v;
  6164. end;
  6165. var
  6166. locObjA, locObjB : ISDODataObject;
  6167. ls : ISDOSettingList;
  6168. locProp : ISDOProperty;
  6169. begin
  6170. SetConstants();
  6171. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6172. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6173. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6174. FChangeSummary.beginLogging();
  6175. ls := FChangeSummary.getOldValues(locObjA);
  6176. CheckEquals(0, ls.size());
  6177. ls := FChangeSummary.getOldValues(locObjB);
  6178. CheckEquals(0, ls.size());
  6179. locObjA.setBytes(locProp,VAL_1);
  6180. FRecorder.recordChange(locObjA,locProp);
  6181. ls := FChangeSummary.getOldValues(locObjA);
  6182. CheckEquals(1,ls.size());
  6183. locObjB.setBytes(locProp,VAL_1);
  6184. FRecorder.recordChange(locObjB,locProp);
  6185. ls := FChangeSummary.getOldValues(locObjA);
  6186. CheckEquals(1,ls.size());
  6187. ls := FChangeSummary.getOldValues(locObjB);
  6188. CheckEquals(1,ls.size());
  6189. end;
  6190. procedure TSDOChangeSummary_Test.getOldValue_bytes();
  6191. const
  6192. PROP_NAME = s_bytes_prop;
  6193. var
  6194. VAL_1, VAL_2 : TSDOBytes;
  6195. procedure SetConstants();
  6196. var
  6197. v : TSDOBytes;
  6198. k : Integer;
  6199. begin
  6200. SetLength(v,10);
  6201. for k := 0 to High(v) do
  6202. v[k] := k mod High(TSDOByte);
  6203. VAL_1 := v;
  6204. v := nil;
  6205. SetLength(v,20);
  6206. for k := 0 to High(v) do
  6207. v[k] := ( ( 3 * k ) + 1 ) mod High(TSDOByte);
  6208. VAL_2 := v;
  6209. end;
  6210. var
  6211. locObjA, locObjB : ISDODataObject;
  6212. locProp : ISDOProperty;
  6213. locSetting : TValueSetting;
  6214. begin
  6215. SetConstants();
  6216. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6217. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6218. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6219. FChangeSummary.beginLogging();
  6220. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6221. locObjA.setBytes(locProp,VAL_1);
  6222. FRecorder.recordChange(locObjA,locProp);
  6223. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6224. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6225. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6226. locObjB.setBytes(locProp,VAL_2);
  6227. FRecorder.recordChange(locObjB,locProp);
  6228. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6229. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6230. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6231. end;
  6232. procedure TSDOChangeSummary_Test.undoChanges_simple_bytes();
  6233. const
  6234. LOCAL_PROP_NAME = s_bytes_prop;
  6235. var
  6236. locObjA : ISDODataObject;
  6237. locProp : ISDOProperty;
  6238. locSetting : TValueSetting;
  6239. buffer : TSDOBytes;
  6240. locCS : ISDOChangeSummary;
  6241. begin
  6242. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6243. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6244. locObjA.setBytes(locProp,RandomBytes(100));
  6245. locSetting := nil;
  6246. try
  6247. buffer := locObjA.getBytes(locProp);
  6248. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6249. locCS := locObjA.getChangeSummary();
  6250. locCS.beginLogging();
  6251. locObjA.setBytes(locProp,RandomBytes(100));
  6252. locCS.endLogging();
  6253. locCS.undoChanges();
  6254. CheckEquals(0,locCS.getChangedDataObjects().size());
  6255. check_value(locObjA,locProp,locSetting);
  6256. FreeAndNil(locSetting);
  6257. buffer := locObjA.getBytes(locProp);
  6258. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6259. locCS := locObjA.getChangeSummary();
  6260. locCS.beginLogging();
  6261. locObjA.setBytes(locProp,RandomBytes(100));
  6262. locObjA.setBytes(locProp,RandomBytes(100));
  6263. locCS.endLogging();
  6264. locCS.undoChanges();
  6265. CheckEquals(0,locCS.getChangedDataObjects().size());
  6266. check_value(locObjA,locProp,locSetting);
  6267. finally
  6268. FreeAndNil(locSetting);
  6269. end;
  6270. end;
  6271. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_bytes();
  6272. const
  6273. LOCAL_PROP_NAME = s_bytes_prop;
  6274. var
  6275. locObjA : ISDODataObject;
  6276. locProp : ISDOProperty;
  6277. locSetting : TValueSetting;
  6278. buffer : TSDOBytes;
  6279. locCS : ISDOChangeSummary;
  6280. begin
  6281. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6282. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6283. locObjA.setBytes(locProp,RandomBytes(100));
  6284. locSetting := nil;
  6285. try
  6286. buffer := locObjA.getBytes(locProp);
  6287. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6288. locCS := locObjA.getChangeSummary();
  6289. locCS.beginLogging();
  6290. locObjA.unset(locProp);
  6291. locCS.endLogging();
  6292. locCS.undoChanges();
  6293. CheckEquals(0,locCS.getChangedDataObjects().size());
  6294. check_value(locObjA,locProp,locSetting);
  6295. finally
  6296. FreeAndNil(locSetting);
  6297. end;
  6298. end;
  6299. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_bytes();
  6300. const
  6301. LOCAL_PROP_NAME = s_bytes_prop;
  6302. var
  6303. locObjA : ISDODataObject;
  6304. locProp : ISDOProperty;
  6305. locSetting : TValueSetting;
  6306. buffer : TSDOBytes;
  6307. locCS : ISDOChangeSummary;
  6308. begin
  6309. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6310. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6311. locObjA.setBytes(locProp,RandomBytes(100));
  6312. locSetting := nil;
  6313. try
  6314. buffer := locObjA.getBytes(locProp);
  6315. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6316. locCS := locObjA.getChangeSummary();
  6317. locCS.beginLogging();
  6318. locObjA.setNull(locProp);
  6319. locCS.endLogging();
  6320. locCS.undoChanges();
  6321. CheckEquals(0,locCS.getChangedDataObjects().size());
  6322. check_value(locObjA,locProp,locSetting);
  6323. finally
  6324. FreeAndNil(locSetting);
  6325. end;
  6326. end;
  6327. {$ENDIF HAS_SDO_BYTES}
  6328. {$IFDEF HAS_SDO_CHAR}
  6329. procedure TSDOChangeSummary_Test.getOldValues_char();
  6330. const
  6331. VAL_1 : TSDOChar = 'c';
  6332. PROP_NAME = s_char_prop;
  6333. var
  6334. locObjA, locObjB : ISDODataObject;
  6335. ls : ISDOSettingList;
  6336. locProp : ISDOProperty;
  6337. begin
  6338. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6339. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6340. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6341. FChangeSummary.beginLogging();
  6342. ls := FChangeSummary.getOldValues(locObjA);
  6343. CheckEquals(0, ls.size());
  6344. ls := FChangeSummary.getOldValues(locObjB);
  6345. CheckEquals(0, ls.size());
  6346. locObjA.setCharacter(locProp,VAL_1);
  6347. FRecorder.recordChange(locObjA,locProp);
  6348. ls := FChangeSummary.getOldValues(locObjA);
  6349. CheckEquals(1,ls.size());
  6350. locObjB.setCharacter(locProp,VAL_1);
  6351. FRecorder.recordChange(locObjB,locProp);
  6352. ls := FChangeSummary.getOldValues(locObjA);
  6353. CheckEquals(1,ls.size());
  6354. ls := FChangeSummary.getOldValues(locObjB);
  6355. CheckEquals(1,ls.size());
  6356. end;
  6357. procedure TSDOChangeSummary_Test.getOldValue_char();
  6358. const
  6359. VAL_1 : TSDOChar = 'd';
  6360. VAL_2 : TSDOChar = 'i';
  6361. PROP_NAME = s_char_prop;
  6362. var
  6363. locObjA, locObjB : ISDODataObject;
  6364. locProp : ISDOProperty;
  6365. locSetting : TValueSetting;
  6366. begin
  6367. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6368. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6369. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6370. FChangeSummary.beginLogging();
  6371. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6372. locObjA.setCharacter(locProp,VAL_1);
  6373. FRecorder.recordChange(locObjA,locProp);
  6374. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6375. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6376. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6377. locObjB.setCharacter(locProp,VAL_2);
  6378. FRecorder.recordChange(locObjB,locProp);
  6379. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6380. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6381. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6382. end;
  6383. procedure TSDOChangeSummary_Test.undoChanges_simple_char();
  6384. const
  6385. LOCAL_PROP_NAME = s_char_prop;
  6386. var
  6387. locObjA : ISDODataObject;
  6388. locProp : ISDOProperty;
  6389. locSetting : TValueSetting;
  6390. buffer : TSDOChar;
  6391. locCS : ISDOChangeSummary;
  6392. begin
  6393. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6394. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6395. locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  6396. locSetting := nil;
  6397. try
  6398. buffer := locObjA.getCharacter(locProp);
  6399. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6400. locCS := locObjA.getChangeSummary();
  6401. locCS.beginLogging();
  6402. locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  6403. locCS.endLogging();
  6404. locCS.undoChanges();
  6405. CheckEquals(0,locCS.getChangedDataObjects().size());
  6406. check_value(locObjA,locProp,locSetting);
  6407. FreeAndNil(locSetting);
  6408. buffer := locObjA.getCharacter(locProp);
  6409. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6410. locCS := locObjA.getChangeSummary();
  6411. locCS.beginLogging();
  6412. locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  6413. locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  6414. locCS.endLogging();
  6415. locCS.undoChanges();
  6416. CheckEquals(0,locCS.getChangedDataObjects().size());
  6417. check_value(locObjA,locProp,locSetting);
  6418. finally
  6419. FreeAndNil(locSetting);
  6420. end;
  6421. end;
  6422. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_char();
  6423. const
  6424. LOCAL_PROP_NAME = s_char_prop;
  6425. var
  6426. locObjA : ISDODataObject;
  6427. locProp : ISDOProperty;
  6428. locSetting : TValueSetting;
  6429. buffer : TSDOChar;
  6430. locCS : ISDOChangeSummary;
  6431. begin
  6432. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6433. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6434. locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  6435. locSetting := nil;
  6436. try
  6437. buffer := locObjA.getCharacter(locProp);
  6438. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6439. locCS := locObjA.getChangeSummary();
  6440. locCS.beginLogging();
  6441. locObjA.unset(locProp);
  6442. locCS.endLogging();
  6443. locCS.undoChanges();
  6444. CheckEquals(0,locCS.getChangedDataObjects().size());
  6445. check_value(locObjA,locProp,locSetting);
  6446. finally
  6447. FreeAndNil(locSetting);
  6448. end;
  6449. end;
  6450. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_char();
  6451. const
  6452. LOCAL_PROP_NAME = s_char_prop;
  6453. var
  6454. locObjA : ISDODataObject;
  6455. locProp : ISDOProperty;
  6456. locSetting : TValueSetting;
  6457. buffer : TSDOChar;
  6458. locCS : ISDOChangeSummary;
  6459. begin
  6460. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6461. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6462. locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  6463. locSetting := nil;
  6464. try
  6465. buffer := locObjA.getCharacter(locProp);
  6466. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6467. locCS := locObjA.getChangeSummary();
  6468. locCS.beginLogging();
  6469. locObjA.setNull(locProp);
  6470. locCS.endLogging();
  6471. locCS.undoChanges();
  6472. CheckEquals(0,locCS.getChangedDataObjects().size());
  6473. check_value(locObjA,locProp,locSetting);
  6474. finally
  6475. FreeAndNil(locSetting);
  6476. end;
  6477. end;
  6478. {$ENDIF HAS_SDO_CHAR}
  6479. {$IFDEF HAS_SDO_CURRENCY}
  6480. procedure TSDOChangeSummary_Test.getOldValues_currency();
  6481. const
  6482. VAL_1 : TSDOCurrency = 1238527419247;
  6483. PROP_NAME = s_currency_prop;
  6484. var
  6485. locObjA, locObjB : ISDODataObject;
  6486. ls : ISDOSettingList;
  6487. locProp : ISDOProperty;
  6488. begin
  6489. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6490. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6491. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6492. FChangeSummary.beginLogging();
  6493. ls := FChangeSummary.getOldValues(locObjA);
  6494. CheckEquals(0, ls.size());
  6495. ls := FChangeSummary.getOldValues(locObjB);
  6496. CheckEquals(0, ls.size());
  6497. locObjA.setCurrency(locProp,VAL_1);
  6498. FRecorder.recordChange(locObjA,locProp);
  6499. ls := FChangeSummary.getOldValues(locObjA);
  6500. CheckEquals(1,ls.size());
  6501. locObjB.setCurrency(locProp,VAL_1);
  6502. FRecorder.recordChange(locObjB,locProp);
  6503. ls := FChangeSummary.getOldValues(locObjA);
  6504. CheckEquals(1,ls.size());
  6505. ls := FChangeSummary.getOldValues(locObjB);
  6506. CheckEquals(1,ls.size());
  6507. end;
  6508. procedure TSDOChangeSummary_Test.getOldValue_currency();
  6509. const
  6510. VAL_1 : TSDOCurrency = 98765432178225;
  6511. VAL_2 : TSDOCurrency = -4587412254554;
  6512. PROP_NAME = s_currency_prop;
  6513. var
  6514. locObjA, locObjB : ISDODataObject;
  6515. locProp : ISDOProperty;
  6516. locSetting : TValueSetting;
  6517. begin
  6518. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6519. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6520. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6521. FChangeSummary.beginLogging();
  6522. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6523. locObjA.setCurrency(locProp,VAL_1);
  6524. FRecorder.recordChange(locObjA,locProp);
  6525. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6526. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6527. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6528. locObjB.setCurrency(locProp,VAL_2);
  6529. FRecorder.recordChange(locObjB,locProp);
  6530. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6531. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6532. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6533. end;
  6534. procedure TSDOChangeSummary_Test.undoChanges_simple_currency();
  6535. const
  6536. LOCAL_PROP_NAME = s_currency_prop;
  6537. var
  6538. locObjA : ISDODataObject;
  6539. locProp : ISDOProperty;
  6540. locSetting : TValueSetting;
  6541. buffer : TSDOCurrency;
  6542. locCS : ISDOChangeSummary;
  6543. begin
  6544. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6545. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6546. locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6547. locSetting := nil;
  6548. try
  6549. buffer := locObjA.getCurrency(locProp);
  6550. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6551. locCS := locObjA.getChangeSummary();
  6552. locCS.beginLogging();
  6553. locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6554. locCS.endLogging();
  6555. locCS.undoChanges();
  6556. CheckEquals(0,locCS.getChangedDataObjects().size());
  6557. check_value(locObjA,locProp,locSetting);
  6558. FreeAndNil(locSetting);
  6559. buffer := locObjA.getCurrency(locProp);
  6560. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6561. locCS := locObjA.getChangeSummary();
  6562. locCS.beginLogging();
  6563. locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6564. locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6565. locCS.endLogging();
  6566. locCS.undoChanges();
  6567. CheckEquals(0,locCS.getChangedDataObjects().size());
  6568. check_value(locObjA,locProp,locSetting);
  6569. finally
  6570. FreeAndNil(locSetting);
  6571. end;
  6572. end;
  6573. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_currency();
  6574. const
  6575. LOCAL_PROP_NAME = s_currency_prop;
  6576. var
  6577. locObjA : ISDODataObject;
  6578. locProp : ISDOProperty;
  6579. locSetting : TValueSetting;
  6580. buffer : TSDOCurrency;
  6581. locCS : ISDOChangeSummary;
  6582. begin
  6583. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6584. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6585. locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6586. locSetting := nil;
  6587. try
  6588. buffer := locObjA.getCurrency(locProp);
  6589. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6590. locCS := locObjA.getChangeSummary();
  6591. locCS.beginLogging();
  6592. locObjA.unset(locProp);
  6593. locCS.endLogging();
  6594. locCS.undoChanges();
  6595. CheckEquals(0,locCS.getChangedDataObjects().size());
  6596. check_value(locObjA,locProp,locSetting);
  6597. finally
  6598. FreeAndNil(locSetting);
  6599. end;
  6600. end;
  6601. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_currency();
  6602. const
  6603. LOCAL_PROP_NAME = s_currency_prop;
  6604. var
  6605. locObjA : ISDODataObject;
  6606. locProp : ISDOProperty;
  6607. locSetting : TValueSetting;
  6608. buffer : TSDOCurrency;
  6609. locCS : ISDOChangeSummary;
  6610. begin
  6611. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6612. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6613. locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6614. locSetting := nil;
  6615. try
  6616. buffer := locObjA.getCurrency(locProp);
  6617. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6618. locCS := locObjA.getChangeSummary();
  6619. locCS.beginLogging();
  6620. locObjA.setNull(locProp);
  6621. locCS.endLogging();
  6622. locCS.undoChanges();
  6623. CheckEquals(0,locCS.getChangedDataObjects().size());
  6624. check_value(locObjA,locProp,locSetting);
  6625. finally
  6626. FreeAndNil(locSetting);
  6627. end;
  6628. end;
  6629. {$ENDIF HAS_SDO_CURRENCY}
  6630. {$IFDEF HAS_SDO_DOUBLE}
  6631. procedure TSDOChangeSummary_Test.getOldValues_double();
  6632. const
  6633. VAL_1 : TSDODouble = 1238527419247;
  6634. PROP_NAME = s_double_prop;
  6635. var
  6636. locObjA, locObjB : ISDODataObject;
  6637. ls : ISDOSettingList;
  6638. locProp : ISDOProperty;
  6639. begin
  6640. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6641. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6642. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6643. FChangeSummary.beginLogging();
  6644. ls := FChangeSummary.getOldValues(locObjA);
  6645. CheckEquals(0, ls.size());
  6646. ls := FChangeSummary.getOldValues(locObjB);
  6647. CheckEquals(0, ls.size());
  6648. locObjA.setDouble(locProp,VAL_1);
  6649. FRecorder.recordChange(locObjA,locProp);
  6650. ls := FChangeSummary.getOldValues(locObjA);
  6651. CheckEquals(1,ls.size());
  6652. locObjB.setDouble(locProp,VAL_1);
  6653. FRecorder.recordChange(locObjB,locProp);
  6654. ls := FChangeSummary.getOldValues(locObjA);
  6655. CheckEquals(1,ls.size());
  6656. ls := FChangeSummary.getOldValues(locObjB);
  6657. CheckEquals(1,ls.size());
  6658. end;
  6659. procedure TSDOChangeSummary_Test.getOldValue_double();
  6660. const
  6661. VAL_1 : TSDODouble = 9876543211478225;
  6662. VAL_2 : TSDODouble = -4587412282254554;
  6663. PROP_NAME = s_double_prop;
  6664. var
  6665. locObjA, locObjB : ISDODataObject;
  6666. locProp : ISDOProperty;
  6667. locSetting : TValueSetting;
  6668. begin
  6669. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6670. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6671. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6672. FChangeSummary.beginLogging();
  6673. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6674. locObjA.setDouble(locProp,VAL_1);
  6675. FRecorder.recordChange(locObjA,locProp);
  6676. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6677. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6678. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6679. locObjB.setDouble(locProp,VAL_2);
  6680. FRecorder.recordChange(locObjB,locProp);
  6681. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6682. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6683. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6684. end;
  6685. procedure TSDOChangeSummary_Test.undoChanges_simple_double();
  6686. const
  6687. LOCAL_PROP_NAME = s_double_prop;
  6688. var
  6689. locObjA : ISDODataObject;
  6690. locProp : ISDOProperty;
  6691. locSetting : TValueSetting;
  6692. buffer : TSDODouble;
  6693. locCS : ISDOChangeSummary;
  6694. begin
  6695. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6696. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6697. locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6698. locSetting := nil;
  6699. try
  6700. buffer := locObjA.getDouble(locProp);
  6701. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6702. locCS := locObjA.getChangeSummary();
  6703. locCS.beginLogging();
  6704. locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6705. locCS.endLogging();
  6706. locCS.undoChanges();
  6707. CheckEquals(0,locCS.getChangedDataObjects().size());
  6708. check_value(locObjA,locProp,locSetting);
  6709. FreeAndNil(locSetting);
  6710. buffer := locObjA.getDouble(locProp);
  6711. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6712. locCS := locObjA.getChangeSummary();
  6713. locCS.beginLogging();
  6714. locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6715. locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6716. locCS.endLogging();
  6717. locCS.undoChanges();
  6718. CheckEquals(0,locCS.getChangedDataObjects().size());
  6719. check_value(locObjA,locProp,locSetting);
  6720. finally
  6721. FreeAndNil(locSetting);
  6722. end;
  6723. end;
  6724. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_double();
  6725. const
  6726. LOCAL_PROP_NAME = s_double_prop;
  6727. var
  6728. locObjA : ISDODataObject;
  6729. locProp : ISDOProperty;
  6730. locSetting : TValueSetting;
  6731. buffer : TSDODouble;
  6732. locCS : ISDOChangeSummary;
  6733. begin
  6734. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6735. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6736. locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6737. locSetting := nil;
  6738. try
  6739. buffer := locObjA.getDouble(locProp);
  6740. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6741. locCS := locObjA.getChangeSummary();
  6742. locCS.beginLogging();
  6743. locObjA.unset(locProp);
  6744. locCS.endLogging();
  6745. locCS.undoChanges();
  6746. CheckEquals(0,locCS.getChangedDataObjects().size());
  6747. check_value(locObjA,locProp,locSetting);
  6748. finally
  6749. FreeAndNil(locSetting);
  6750. end;
  6751. end;
  6752. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_double();
  6753. const
  6754. LOCAL_PROP_NAME = s_double_prop;
  6755. var
  6756. locObjA : ISDODataObject;
  6757. locProp : ISDOProperty;
  6758. locSetting : TValueSetting;
  6759. buffer : TSDODouble;
  6760. locCS : ISDOChangeSummary;
  6761. begin
  6762. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6763. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6764. locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6765. locSetting := nil;
  6766. try
  6767. buffer := locObjA.getDouble(locProp);
  6768. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6769. locCS := locObjA.getChangeSummary();
  6770. locCS.beginLogging();
  6771. locObjA.setNull(locProp);
  6772. locCS.endLogging();
  6773. locCS.undoChanges();
  6774. CheckEquals(0,locCS.getChangedDataObjects().size());
  6775. check_value(locObjA,locProp,locSetting);
  6776. finally
  6777. FreeAndNil(locSetting);
  6778. end;
  6779. end;
  6780. {$ENDIF HAS_SDO_DOUBLE}
  6781. {$IFDEF HAS_SDO_FLOAT}
  6782. procedure TSDOChangeSummary_Test.getOldValues_float();
  6783. const
  6784. VAL_1 : TSDOFloat = 1238527419247;
  6785. PROP_NAME = s_float_prop;
  6786. var
  6787. locObjA, locObjB : ISDODataObject;
  6788. ls : ISDOSettingList;
  6789. locProp : ISDOProperty;
  6790. begin
  6791. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6792. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6793. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6794. FChangeSummary.beginLogging();
  6795. ls := FChangeSummary.getOldValues(locObjA);
  6796. CheckEquals(0, ls.size());
  6797. ls := FChangeSummary.getOldValues(locObjB);
  6798. CheckEquals(0, ls.size());
  6799. locObjA.setFloat(locProp,VAL_1);
  6800. FRecorder.recordChange(locObjA,locProp);
  6801. ls := FChangeSummary.getOldValues(locObjA);
  6802. CheckEquals(1,ls.size());
  6803. locObjB.setFloat(locProp,VAL_1);
  6804. FRecorder.recordChange(locObjB,locProp);
  6805. ls := FChangeSummary.getOldValues(locObjA);
  6806. CheckEquals(1,ls.size());
  6807. ls := FChangeSummary.getOldValues(locObjB);
  6808. CheckEquals(1,ls.size());
  6809. end;
  6810. procedure TSDOChangeSummary_Test.getOldValue_float();
  6811. const
  6812. VAL_1 : TSDOFloat = 9876543211478225;
  6813. VAL_2 : TSDOFloat = -4587412282254554;
  6814. PROP_NAME = s_float_prop;
  6815. var
  6816. locObjA, locObjB : ISDODataObject;
  6817. locProp : ISDOProperty;
  6818. locSetting : TValueSetting;
  6819. begin
  6820. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6821. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6822. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6823. FChangeSummary.beginLogging();
  6824. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6825. locObjA.setFloat(locProp,VAL_1);
  6826. FRecorder.recordChange(locObjA,locProp);
  6827. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6828. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6829. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6830. locObjB.setFloat(locProp,VAL_2);
  6831. FRecorder.recordChange(locObjB,locProp);
  6832. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6833. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6834. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6835. end;
  6836. procedure TSDOChangeSummary_Test.undoChanges_simple_float();
  6837. const
  6838. LOCAL_PROP_NAME = s_float_prop;
  6839. var
  6840. locObjA : ISDODataObject;
  6841. locProp : ISDOProperty;
  6842. locSetting : TValueSetting;
  6843. buffer : TSDOFloat;
  6844. locCS : ISDOChangeSummary;
  6845. begin
  6846. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6847. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6848. locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6849. locSetting := nil;
  6850. try
  6851. buffer := locObjA.getFloat(locProp);
  6852. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6853. locCS := locObjA.getChangeSummary();
  6854. locCS.beginLogging();
  6855. locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6856. locCS.endLogging();
  6857. locCS.undoChanges();
  6858. CheckEquals(0,locCS.getChangedDataObjects().size());
  6859. check_value(locObjA,locProp,locSetting);
  6860. FreeAndNil(locSetting);
  6861. buffer := locObjA.getFloat(locProp);
  6862. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6863. locCS := locObjA.getChangeSummary();
  6864. locCS.beginLogging();
  6865. locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6866. locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6867. locCS.endLogging();
  6868. locCS.undoChanges();
  6869. CheckEquals(0,locCS.getChangedDataObjects().size());
  6870. check_value(locObjA,locProp,locSetting);
  6871. finally
  6872. FreeAndNil(locSetting);
  6873. end;
  6874. end;
  6875. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_float();
  6876. const
  6877. LOCAL_PROP_NAME = s_float_prop;
  6878. var
  6879. locObjA : ISDODataObject;
  6880. locProp : ISDOProperty;
  6881. locSetting : TValueSetting;
  6882. buffer : TSDOFloat;
  6883. locCS : ISDOChangeSummary;
  6884. begin
  6885. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6886. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6887. locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6888. locSetting := nil;
  6889. try
  6890. buffer := locObjA.getFloat(locProp);
  6891. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6892. locCS := locObjA.getChangeSummary();
  6893. locCS.beginLogging();
  6894. locObjA.unset(locProp);
  6895. locCS.endLogging();
  6896. locCS.undoChanges();
  6897. CheckEquals(0,locCS.getChangedDataObjects().size());
  6898. check_value(locObjA,locProp,locSetting);
  6899. finally
  6900. FreeAndNil(locSetting);
  6901. end;
  6902. end;
  6903. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_float();
  6904. const
  6905. LOCAL_PROP_NAME = s_float_prop;
  6906. var
  6907. locObjA : ISDODataObject;
  6908. locProp : ISDOProperty;
  6909. locSetting : TValueSetting;
  6910. buffer : TSDOFloat;
  6911. locCS : ISDOChangeSummary;
  6912. begin
  6913. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6914. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6915. locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
  6916. locSetting := nil;
  6917. try
  6918. buffer := locObjA.getFloat(locProp);
  6919. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  6920. locCS := locObjA.getChangeSummary();
  6921. locCS.beginLogging();
  6922. locObjA.setNull(locProp);
  6923. locCS.endLogging();
  6924. locCS.undoChanges();
  6925. CheckEquals(0,locCS.getChangedDataObjects().size());
  6926. check_value(locObjA,locProp,locSetting);
  6927. finally
  6928. FreeAndNil(locSetting);
  6929. end;
  6930. end;
  6931. {$ENDIF HAS_SDO_FLOAT}
  6932. {$IFDEF HAS_SDO_LONG}
  6933. procedure TSDOChangeSummary_Test.getOldValues_long();
  6934. const
  6935. VAL_1 : TSDOLong = 123852741963654247;
  6936. PROP_NAME = s_long_prop;
  6937. var
  6938. locObjA, locObjB : ISDODataObject;
  6939. ls : ISDOSettingList;
  6940. locProp : ISDOProperty;
  6941. begin
  6942. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6943. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6944. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6945. FChangeSummary.beginLogging();
  6946. ls := FChangeSummary.getOldValues(locObjA);
  6947. CheckEquals(0, ls.size());
  6948. ls := FChangeSummary.getOldValues(locObjB);
  6949. CheckEquals(0, ls.size());
  6950. locObjA.setLong(locProp,VAL_1);
  6951. FRecorder.recordChange(locObjA,locProp);
  6952. ls := FChangeSummary.getOldValues(locObjA);
  6953. CheckEquals(1,ls.size());
  6954. locObjB.setLong(locProp,VAL_1);
  6955. FRecorder.recordChange(locObjB,locProp);
  6956. ls := FChangeSummary.getOldValues(locObjA);
  6957. CheckEquals(1,ls.size());
  6958. ls := FChangeSummary.getOldValues(locObjB);
  6959. CheckEquals(1,ls.size());
  6960. end;
  6961. procedure TSDOChangeSummary_Test.getOldValue_long();
  6962. const
  6963. VAL_1 : TSDOLong = 9876543211478225;
  6964. VAL_2 : TSDOLong = -4587412282254554;
  6965. PROP_NAME = s_long_prop;
  6966. var
  6967. locObjA, locObjB : ISDODataObject;
  6968. locProp : ISDOProperty;
  6969. locSetting : TValueSetting;
  6970. begin
  6971. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  6972. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  6973. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  6974. FChangeSummary.beginLogging();
  6975. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  6976. locObjA.setLong(locProp,VAL_1);
  6977. FRecorder.recordChange(locObjA,locProp);
  6978. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  6979. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6980. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6981. locObjB.setLong(locProp,VAL_2);
  6982. FRecorder.recordChange(locObjB,locProp);
  6983. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  6984. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  6985. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  6986. end;
  6987. procedure TSDOChangeSummary_Test.undoChanges_simple_long();
  6988. const
  6989. LOCAL_PROP_NAME = s_long_prop;
  6990. var
  6991. locObjA : ISDODataObject;
  6992. locProp : ISDOProperty;
  6993. locSetting : TValueSetting;
  6994. buffer : TSDOLong;
  6995. locCS : ISDOChangeSummary;
  6996. begin
  6997. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  6998. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  6999. locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  7000. locSetting := nil;
  7001. try
  7002. buffer := locObjA.getLong(locProp);
  7003. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7004. locCS := locObjA.getChangeSummary();
  7005. locCS.beginLogging();
  7006. locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  7007. locCS.endLogging();
  7008. locCS.undoChanges();
  7009. CheckEquals(0,locCS.getChangedDataObjects().size());
  7010. check_value(locObjA,locProp,locSetting);
  7011. FreeAndNil(locSetting);
  7012. buffer := locObjA.getLong(locProp);
  7013. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7014. locCS := locObjA.getChangeSummary();
  7015. locCS.beginLogging();
  7016. locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  7017. locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  7018. locCS.endLogging();
  7019. locCS.undoChanges();
  7020. CheckEquals(0,locCS.getChangedDataObjects().size());
  7021. check_value(locObjA,locProp,locSetting);
  7022. finally
  7023. FreeAndNil(locSetting);
  7024. end;
  7025. end;
  7026. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_long();
  7027. const
  7028. LOCAL_PROP_NAME = s_long_prop;
  7029. var
  7030. locObjA : ISDODataObject;
  7031. locProp : ISDOProperty;
  7032. locSetting : TValueSetting;
  7033. buffer : TSDOLong;
  7034. locCS : ISDOChangeSummary;
  7035. begin
  7036. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7037. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7038. locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  7039. locSetting := nil;
  7040. try
  7041. buffer := locObjA.getLong(locProp);
  7042. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7043. locCS := locObjA.getChangeSummary();
  7044. locCS.beginLogging();
  7045. locObjA.unset(locProp);
  7046. locCS.endLogging();
  7047. locCS.undoChanges();
  7048. CheckEquals(0,locCS.getChangedDataObjects().size());
  7049. check_value(locObjA,locProp,locSetting);
  7050. finally
  7051. FreeAndNil(locSetting);
  7052. end;
  7053. end;
  7054. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_long();
  7055. const
  7056. LOCAL_PROP_NAME = s_long_prop;
  7057. var
  7058. locObjA : ISDODataObject;
  7059. locProp : ISDOProperty;
  7060. locSetting : TValueSetting;
  7061. buffer : TSDOLong;
  7062. locCS : ISDOChangeSummary;
  7063. begin
  7064. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7065. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7066. locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  7067. locSetting := nil;
  7068. try
  7069. buffer := locObjA.getLong(locProp);
  7070. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7071. locCS := locObjA.getChangeSummary();
  7072. locCS.beginLogging();
  7073. locObjA.setNull(locProp);
  7074. locCS.endLogging();
  7075. locCS.undoChanges();
  7076. CheckEquals(0,locCS.getChangedDataObjects().size());
  7077. check_value(locObjA,locProp,locSetting);
  7078. finally
  7079. FreeAndNil(locSetting);
  7080. end;
  7081. end;
  7082. {$ENDIF HAS_SDO_LONG}
  7083. {$IFDEF HAS_SDO_SHORT}
  7084. procedure TSDOChangeSummary_Test.getOldValues_short();
  7085. const
  7086. VAL_1 : TSDOShort = 12385;
  7087. PROP_NAME = s_short_prop;
  7088. var
  7089. locObjA, locObjB : ISDODataObject;
  7090. ls : ISDOSettingList;
  7091. locProp : ISDOProperty;
  7092. begin
  7093. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  7094. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  7095. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  7096. FChangeSummary.beginLogging();
  7097. ls := FChangeSummary.getOldValues(locObjA);
  7098. CheckEquals(0, ls.size());
  7099. ls := FChangeSummary.getOldValues(locObjB);
  7100. CheckEquals(0, ls.size());
  7101. locObjA.setShort(locProp,VAL_1);
  7102. FRecorder.recordChange(locObjA,locProp);
  7103. ls := FChangeSummary.getOldValues(locObjA);
  7104. CheckEquals(1,ls.size());
  7105. locObjB.setShort(locProp,VAL_1);
  7106. FRecorder.recordChange(locObjB,locProp);
  7107. ls := FChangeSummary.getOldValues(locObjA);
  7108. CheckEquals(1,ls.size());
  7109. ls := FChangeSummary.getOldValues(locObjB);
  7110. CheckEquals(1,ls.size());
  7111. end;
  7112. procedure TSDOChangeSummary_Test.getOldValue_short();
  7113. const
  7114. VAL_1 : TSDOShort = 9876;
  7115. VAL_2 : TSDOShort = -4587;
  7116. PROP_NAME = s_short_prop;
  7117. var
  7118. locObjA, locObjB : ISDODataObject;
  7119. locProp : ISDOProperty;
  7120. locSetting : TValueSetting;
  7121. begin
  7122. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  7123. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  7124. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  7125. FChangeSummary.beginLogging();
  7126. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  7127. locObjA.setShort(locProp,VAL_1);
  7128. FRecorder.recordChange(locObjA,locProp);
  7129. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  7130. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  7131. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  7132. locObjB.setShort(locProp,VAL_2);
  7133. FRecorder.recordChange(locObjB,locProp);
  7134. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  7135. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  7136. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  7137. end;
  7138. procedure TSDOChangeSummary_Test.undoChanges_simple_short();
  7139. const
  7140. LOCAL_PROP_NAME = s_short_prop;
  7141. var
  7142. locObjA : ISDODataObject;
  7143. locProp : ISDOProperty;
  7144. locSetting : TValueSetting;
  7145. buffer : TSDOShort;
  7146. locCS : ISDOChangeSummary;
  7147. begin
  7148. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7149. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7150. locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
  7151. locSetting := nil;
  7152. try
  7153. buffer := locObjA.getShort(locProp);
  7154. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7155. locCS := locObjA.getChangeSummary();
  7156. locCS.beginLogging();
  7157. locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
  7158. locCS.endLogging();
  7159. locCS.undoChanges();
  7160. CheckEquals(0,locCS.getChangedDataObjects().size());
  7161. check_value(locObjA,locProp,locSetting);
  7162. FreeAndNil(locSetting);
  7163. buffer := locObjA.getShort(locProp);
  7164. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7165. locCS := locObjA.getChangeSummary();
  7166. locCS.beginLogging();
  7167. locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
  7168. locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
  7169. locCS.endLogging();
  7170. locCS.undoChanges();
  7171. CheckEquals(0,locCS.getChangedDataObjects().size());
  7172. check_value(locObjA,locProp,locSetting);
  7173. finally
  7174. FreeAndNil(locSetting);
  7175. end;
  7176. end;
  7177. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_short();
  7178. const
  7179. LOCAL_PROP_NAME = s_short_prop;
  7180. var
  7181. locObjA : ISDODataObject;
  7182. locProp : ISDOProperty;
  7183. locSetting : TValueSetting;
  7184. buffer : TSDOShort;
  7185. locCS : ISDOChangeSummary;
  7186. begin
  7187. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7188. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7189. locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
  7190. locSetting := nil;
  7191. try
  7192. buffer := locObjA.getShort(locProp);
  7193. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7194. locCS := locObjA.getChangeSummary();
  7195. locCS.beginLogging();
  7196. locObjA.unset(locProp);
  7197. locCS.endLogging();
  7198. locCS.undoChanges();
  7199. CheckEquals(0,locCS.getChangedDataObjects().size());
  7200. check_value(locObjA,locProp,locSetting);
  7201. finally
  7202. FreeAndNil(locSetting);
  7203. end;
  7204. end;
  7205. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_short();
  7206. const
  7207. LOCAL_PROP_NAME = s_short_prop;
  7208. var
  7209. locObjA : ISDODataObject;
  7210. locProp : ISDOProperty;
  7211. locSetting : TValueSetting;
  7212. buffer : TSDOShort;
  7213. locCS : ISDOChangeSummary;
  7214. begin
  7215. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7216. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7217. locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
  7218. locSetting := nil;
  7219. try
  7220. buffer := locObjA.getShort(locProp);
  7221. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7222. locCS := locObjA.getChangeSummary();
  7223. locCS.beginLogging();
  7224. locObjA.setNull(locProp);
  7225. locCS.endLogging();
  7226. locCS.undoChanges();
  7227. CheckEquals(0,locCS.getChangedDataObjects().size());
  7228. check_value(locObjA,locProp,locSetting);
  7229. finally
  7230. FreeAndNil(locSetting);
  7231. end;
  7232. end;
  7233. {$ENDIF HAS_SDO_SHORT}
  7234. procedure TSDOChangeSummary_Test.getOldValue_date();
  7235. const
  7236. VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
  7237. VAL_2 : TSDODateTime = ( Date : 34567; HourOffset : 8; MinuteOffset : 9; );
  7238. var
  7239. locObjA, locObjB : ISDODataObject;
  7240. locProp : ISDOProperty;
  7241. locSetting : TValueSetting;
  7242. begin
  7243. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(s_date_prop);
  7244. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  7245. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  7246. FChangeSummary.beginLogging();
  7247. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  7248. locObjA.setDate(locProp,VAL_1);
  7249. FRecorder.recordChange(locObjA,locProp);
  7250. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  7251. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  7252. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  7253. locObjB.setDate(locProp,VAL_2);
  7254. FRecorder.recordChange(locObjB,locProp);
  7255. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  7256. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  7257. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  7258. end;
  7259. procedure TSDOChangeSummary_Test.getOldValue_Integer();
  7260. const
  7261. VAL_1 : TSDOInteger = 123456;
  7262. VAL_2 : TSDOInteger = -987;
  7263. PROP_NAME = s_integer_prop;
  7264. var
  7265. locObjA, locObjB : ISDODataObject;
  7266. locProp : ISDOProperty;
  7267. locSetting : TValueSetting;
  7268. begin
  7269. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  7270. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  7271. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  7272. FChangeSummary.beginLogging();
  7273. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  7274. locObjA.setInteger(locProp,VAL_1);
  7275. FRecorder.recordChange(locObjA,locProp);
  7276. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  7277. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  7278. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  7279. locObjB.setInteger(locProp,VAL_2);
  7280. FRecorder.recordChange(locObjB,locProp);
  7281. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  7282. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  7283. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  7284. end;
  7285. procedure TSDOChangeSummary_Test.getOldValue_string();
  7286. const
  7287. VAL_1 : TSDOString = 'Inoussa.O';
  7288. VAL_2 : TSDOString = 'SDO.AZERTY';
  7289. PROP_NAME = s_string_prop;
  7290. var
  7291. locObjA, locObjB : ISDODataObject;
  7292. locProp : ISDOProperty;
  7293. locSetting : TValueSetting;
  7294. begin
  7295. locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
  7296. locObjA := FFactory.createNew(s_uri,s_type_object_A);
  7297. locObjB := FFactory.createNew(s_uri,s_type_object_A);
  7298. FChangeSummary.beginLogging();
  7299. CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
  7300. locObjA.setString(locProp,VAL_1);
  7301. FRecorder.recordChange(locObjA,locProp);
  7302. locSetting := FChangeSummary.getOldValue(locObjA,locProp);
  7303. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  7304. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  7305. locObjB.setString(locProp,VAL_2);
  7306. FRecorder.recordChange(locObjB,locProp);
  7307. locSetting := FChangeSummary.getOldValue(locObjB,locProp);
  7308. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
  7309. CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
  7310. end;
  7311. procedure TSDOChangeSummary_Test.undoChanges_simple_date();
  7312. const
  7313. LOCAL_PROP_NAME = s_date_prop;
  7314. VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
  7315. VAL_2 : TSDODateTime = ( Date : 34567; HourOffset : 8; MinuteOffset : 9; );
  7316. var
  7317. locObjA : ISDODataObject;
  7318. locProp : ISDOProperty;
  7319. locSetting : TValueSetting;
  7320. buffer : TSDODateTime;
  7321. locCS : ISDOChangeSummary;
  7322. begin
  7323. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7324. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7325. locObjA.setDate(locProp,VAL_1);
  7326. locSetting := nil;
  7327. try
  7328. buffer := locObjA.getDate(locProp);
  7329. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7330. locCS := locObjA.getChangeSummary();
  7331. locCS.beginLogging();
  7332. locObjA.setDate(locProp,VAL_2);
  7333. locCS.endLogging();
  7334. locCS.undoChanges();
  7335. CheckEquals(0,locCS.getChangedDataObjects().size());
  7336. check_value(locObjA,locProp,locSetting);
  7337. FreeAndNil(locSetting);
  7338. buffer := locObjA.getDate(locProp);
  7339. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7340. locCS := locObjA.getChangeSummary();
  7341. locCS.beginLogging();
  7342. locObjA.setDate(locProp,VAL_1);
  7343. locObjA.setDate(locProp,VAL_2);
  7344. locCS.endLogging();
  7345. locCS.undoChanges();
  7346. CheckEquals(0,locCS.getChangedDataObjects().size());
  7347. check_value(locObjA,locProp,locSetting);
  7348. finally
  7349. FreeAndNil(locSetting);
  7350. end;
  7351. end;
  7352. procedure TSDOChangeSummary_Test.undoChanges_simple_integer();
  7353. const
  7354. LOCAL_PROP_NAME = s_integer_prop;
  7355. var
  7356. locObjA : ISDODataObject;
  7357. locProp : ISDOProperty;
  7358. locSetting : TValueSetting;
  7359. buffer : TSDOInteger;
  7360. locCS : ISDOChangeSummary;
  7361. begin
  7362. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7363. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7364. locObjA.setInteger(locProp,RandomRange(-978456,123456));
  7365. locSetting := nil;
  7366. try
  7367. buffer := locObjA.getInteger(locProp);
  7368. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7369. locCS := locObjA.getChangeSummary();
  7370. locCS.beginLogging();
  7371. locObjA.setInteger(locProp,RandomRange(-978456,123456));
  7372. locCS.endLogging();
  7373. locCS.undoChanges();
  7374. CheckEquals(0,locCS.getChangedDataObjects().size());
  7375. check_value(locObjA,locProp,locSetting);
  7376. FreeAndNil(locSetting);
  7377. buffer := locObjA.getInteger(locProp);
  7378. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7379. locCS := locObjA.getChangeSummary();
  7380. locCS.beginLogging();
  7381. locObjA.setInteger(locProp,RandomRange(-978456,123456));
  7382. locObjA.setInteger(locProp,RandomRange(-978456,123456));
  7383. locCS.endLogging();
  7384. locCS.undoChanges();
  7385. CheckEquals(0,locCS.getChangedDataObjects().size());
  7386. check_value(locObjA,locProp,locSetting);
  7387. finally
  7388. FreeAndNil(locSetting);
  7389. end;
  7390. end;
  7391. procedure TSDOChangeSummary_Test.undoChanges_simple_string();
  7392. const
  7393. LOCAL_PROP_NAME = s_string_prop;
  7394. var
  7395. locObjA : ISDODataObject;
  7396. locProp : ISDOProperty;
  7397. locSetting : TValueSetting;
  7398. buffer : TSDOString;
  7399. locCS : ISDOChangeSummary;
  7400. begin
  7401. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7402. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7403. locObjA.setString(locProp,RandomString(RandomRange(0,1000)));
  7404. locSetting := nil;
  7405. try
  7406. buffer := locObjA.getString(locProp);
  7407. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7408. locCS := locObjA.getChangeSummary();
  7409. locCS.beginLogging();
  7410. locObjA.setString(locProp,RandomString(RandomRange(0,1000)));
  7411. locCS.endLogging();
  7412. locCS.undoChanges();
  7413. CheckEquals(0,locCS.getChangedDataObjects().size());
  7414. check_value(locObjA,locProp,locSetting);
  7415. FreeAndNil(locSetting);
  7416. buffer := locObjA.getString(locProp);
  7417. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7418. locCS := locObjA.getChangeSummary();
  7419. locCS.beginLogging();
  7420. locObjA.setString(locProp,RandomString(RandomRange(0,1000)));
  7421. locObjA.setString(locProp,RandomString(RandomRange(0,1000)));
  7422. locCS.endLogging();
  7423. locCS.undoChanges();
  7424. CheckEquals(0,locCS.getChangedDataObjects().size());
  7425. check_value(locObjA,locProp,locSetting);
  7426. finally
  7427. FreeAndNil(locSetting);
  7428. end;
  7429. end;
  7430. procedure TSDOChangeSummary_Test.CheckEquals(expected, actual: TSDODate; msg: string; const AStrict: Boolean);
  7431. var
  7432. e, a : TDateTime;
  7433. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  7434. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  7435. begin
  7436. if AStrict then begin
  7437. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  7438. end else begin
  7439. e := NormalizeToUTC(expected);
  7440. a := NormalizeToUTC(actual);
  7441. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  7442. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  7443. CheckEquals(e_y,a_y,msg);
  7444. CheckEquals(e_m,a_m,msg);
  7445. CheckEquals(e_d,a_d,msg);
  7446. CheckEquals(e_h,a_h,msg);
  7447. CheckEquals(e_mn,a_mn,msg);
  7448. CheckEquals(e_ss,a_ss,msg);
  7449. CheckEquals(e_ms,a_ms,msg);
  7450. end;
  7451. end;
  7452. procedure TSDOChangeSummary_Test.undoChanges_simple_unset_date();
  7453. const
  7454. LOCAL_PROP_NAME = s_date_prop;
  7455. VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
  7456. var
  7457. locObjA : ISDODataObject;
  7458. locProp : ISDOProperty;
  7459. locSetting : TValueSetting;
  7460. buffer : TSDODateTime;
  7461. locCS : ISDOChangeSummary;
  7462. begin
  7463. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7464. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7465. locObjA.setDate(locProp,VAL_1);
  7466. locSetting := nil;
  7467. try
  7468. buffer := locObjA.getDate(locProp);
  7469. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7470. locCS := locObjA.getChangeSummary();
  7471. locCS.beginLogging();
  7472. locObjA.unset(locProp);
  7473. locCS.endLogging();
  7474. locCS.undoChanges();
  7475. CheckEquals(0,locCS.getChangedDataObjects().size());
  7476. check_value(locObjA,locProp,locSetting);
  7477. finally
  7478. FreeAndNil(locSetting);
  7479. end;
  7480. end;
  7481. procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_date();
  7482. const
  7483. LOCAL_PROP_NAME = s_date_prop;
  7484. VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
  7485. var
  7486. locObjA : ISDODataObject;
  7487. locProp : ISDOProperty;
  7488. locSetting : TValueSetting;
  7489. buffer : TSDODateTime;
  7490. locCS : ISDOChangeSummary;
  7491. begin
  7492. locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
  7493. locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
  7494. locObjA.setDate(locProp,VAL_1);
  7495. locSetting := nil;
  7496. try
  7497. buffer := locObjA.getDate(locProp);
  7498. locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
  7499. locCS := locObjA.getChangeSummary();
  7500. locCS.beginLogging();
  7501. locObjA.setNull(locProp);
  7502. locCS.endLogging();
  7503. locCS.undoChanges();
  7504. CheckEquals(0,locCS.getChangedDataObjects().size());
  7505. check_value(locObjA,locProp,locSetting);
  7506. finally
  7507. FreeAndNil(locSetting);
  7508. end;
  7509. end;
  7510. { TSDODataObjectCS_Test }
  7511. type
  7512. TValueState = record
  7513. IsSet : Boolean;
  7514. IsNull : Boolean;
  7515. Value : TValueBuffer;
  7516. end;
  7517. procedure TSDODataObjectCS_Test.CheckEquals(expected, actual: TSDODate;
  7518. msg: string; const AStrict: Boolean);
  7519. var
  7520. e, a : TDateTime;
  7521. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  7522. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  7523. begin
  7524. if AStrict then begin
  7525. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  7526. end else begin
  7527. e := NormalizeToUTC(expected);
  7528. a := NormalizeToUTC(actual);
  7529. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  7530. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  7531. CheckEquals(e_y,a_y,msg);
  7532. CheckEquals(e_m,a_m,msg);
  7533. CheckEquals(e_d,a_d,msg);
  7534. CheckEquals(e_h,a_h,msg);
  7535. CheckEquals(e_mn,a_mn,msg);
  7536. CheckEquals(e_ss,a_ss,msg);
  7537. CheckEquals(e_ms,a_ms,msg);
  7538. end;
  7539. end;
  7540. procedure TSDODataObjectCS_Test.check_bool_logging(
  7541. const AObj : ISDODataObject;
  7542. const APropName : string
  7543. );
  7544. var
  7545. locProp : ISDOProperty;
  7546. locCS : ISDOChangeSummary;
  7547. locSetting : TValueSetting;
  7548. locNewValue : TSDOBoolean;
  7549. locOldState : TValueState;
  7550. begin
  7551. locProp := AObj.getProperty(APropName);
  7552. locCS := AObj.getChangeSummary();
  7553. locNewValue := ( ( RandomRange(Low(TSDOByte),High(TSDOByte)) mod 2 ) = 0);
  7554. locOldState.Value.BooleanValue := AObj.getBoolean(locProp);
  7555. locOldState.IsSet := AObj.isSet(locProp);
  7556. locOldState.IsNull := AObj.isNull(locProp);
  7557. AObj.setBoolean(locProp,locNewValue);
  7558. locSetting := locCS.getOldValue(AObj,locProp);
  7559. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7560. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7561. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7562. CheckEquals(locOldState.Value.BooleanValue,locSetting.getBooleanValue(),'getBooleanValue');
  7563. locNewValue := ( ( RandomRange(Low(Byte),High(Byte)) mod 2 ) = 0);
  7564. AObj.setBoolean(locProp,locNewValue); // the recorder should keep the first recorded old values
  7565. locSetting := locCS.getOldValue(AObj,locProp);
  7566. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7567. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7568. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7569. CheckEquals(locOldState.Value.BooleanValue,locSetting.getBooleanValue(),'getBooleanValue');
  7570. end;
  7571. procedure TSDODataObjectCS_Test.check_byte_logging(
  7572. const AObj : ISDODataObject;
  7573. const APropName : string
  7574. );
  7575. var
  7576. locProp : ISDOProperty;
  7577. locCS : ISDOChangeSummary;
  7578. locSetting : TValueSetting;
  7579. locNewValue : TSDOByte;
  7580. locOldState : TValueState;
  7581. begin
  7582. locProp := AObj.getProperty(APropName);
  7583. locCS := AObj.getChangeSummary();
  7584. locNewValue := RandomRange(Low(TSDOByte),High(TSDOByte));
  7585. locOldState.Value.ByteValue := AObj.getByte(locProp);
  7586. locOldState.IsSet := AObj.isSet(locProp);
  7587. locOldState.IsNull := AObj.isNull(locProp);
  7588. AObj.setByte(locProp,locNewValue);
  7589. locSetting := locCS.getOldValue(AObj,locProp);
  7590. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7591. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7592. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7593. CheckEquals(locOldState.Value.ByteValue,locSetting.getByteValue(),'getByteValue');
  7594. locNewValue := RandomRange(Low(TSDOByte),High(TSDOByte));
  7595. AObj.setByte(locProp,locNewValue); // the recorder should keep the first recorded old values
  7596. locSetting := locCS.getOldValue(AObj,locProp);
  7597. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7598. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7599. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7600. CheckEquals(locOldState.Value.ByteValue,locSetting.getByteValue(),'getByteValue');
  7601. end;
  7602. procedure TSDODataObjectCS_Test.check_date_logging(
  7603. const AObj : ISDODataObject;
  7604. const APropName : string
  7605. );
  7606. var
  7607. locProp : ISDOProperty;
  7608. locCS : ISDOChangeSummary;
  7609. locSetting : TValueSetting;
  7610. locNewValue : TSDODateTime;
  7611. locOldState : TValueState;
  7612. begin
  7613. locProp := AObj.getProperty(APropName);
  7614. locCS := AObj.getChangeSummary();
  7615. locNewValue.Date := 39123.45;
  7616. locNewValue.HourOffset := 2;
  7617. locNewValue.MinuteOffset := 3;
  7618. locOldState.Value.DateValue := AObj.getDate(locProp);
  7619. locOldState.IsSet := AObj.isSet(locProp);
  7620. locOldState.IsNull := AObj.isNull(locProp);
  7621. AObj.setDate(locProp,locNewValue);
  7622. locSetting := locCS.getOldValue(AObj,locProp);
  7623. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7624. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7625. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7626. CheckEquals(locOldState.Value.DateValue,locSetting.getDateValue(),'getDateValue');
  7627. locNewValue.Date := 45000;
  7628. locNewValue.HourOffset := -5;
  7629. locNewValue.MinuteOffset := 0;
  7630. AObj.setDate(locProp,locNewValue); // the recorder should keep the first recorded old values
  7631. locSetting := locCS.getOldValue(AObj,locProp);
  7632. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7633. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7634. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7635. CheckEquals(locOldState.Value.DateValue,locSetting.getDateValue(),'getDateValue');
  7636. end;
  7637. procedure TSDODataObjectCS_Test.check_int_logging(
  7638. const AObj : ISDODataObject;
  7639. const APropName : string
  7640. );
  7641. var
  7642. locProp : ISDOProperty;
  7643. locCS : ISDOChangeSummary;
  7644. locSetting : TValueSetting;
  7645. locNewValue : TSDOInteger;
  7646. locOldState : TValueState;
  7647. begin
  7648. locProp := AObj.getProperty(APropName);
  7649. locCS := AObj.getChangeSummary();
  7650. locNewValue := RandomRange(-121076,121076);
  7651. locOldState.Value.IntegerValue := AObj.getInteger(locProp);
  7652. locOldState.IsSet := AObj.isSet(locProp);
  7653. locOldState.IsNull := AObj.isNull(locProp);
  7654. AObj.setInteger(locProp,locNewValue);
  7655. locSetting := locCS.getOldValue(AObj,locProp);
  7656. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7657. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7658. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7659. CheckEquals(locOldState.Value.IntegerValue,locSetting.getIntegerValue(),'getIntegerValue');
  7660. locNewValue := RandomRange(-121076,121076);
  7661. AObj.setInteger(locProp,locNewValue); // the recorder should keep the first recorded old values
  7662. locSetting := locCS.getOldValue(AObj,locProp);
  7663. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7664. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7665. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7666. CheckEquals(locOldState.Value.IntegerValue,locSetting.getIntegerValue(),'getIntegerValue');
  7667. end;
  7668. procedure TSDODataObjectCS_Test.check_string_logging(
  7669. const AObj : ISDODataObject;
  7670. const APropName : string
  7671. );
  7672. var
  7673. locProp : ISDOProperty;
  7674. locCS : ISDOChangeSummary;
  7675. locSetting : TValueSetting;
  7676. locNewValue : TSDOString;
  7677. locOldState : TValueState;
  7678. begin
  7679. locProp := AObj.getProperty(APropName);
  7680. locCS := AObj.getChangeSummary();
  7681. locNewValue := RandomString(RandomRange(10,1000));
  7682. New(locOldState.Value.StringValue);
  7683. try
  7684. locOldState.Value.StringValue^ := AObj.getString(locProp);
  7685. locOldState.IsSet := AObj.isSet(locProp);
  7686. locOldState.IsNull := AObj.isNull(locProp);
  7687. AObj.setString(locProp,locNewValue);
  7688. locSetting := locCS.getOldValue(AObj,locProp);
  7689. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7690. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7691. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7692. CheckEquals(locOldState.Value.StringValue^,locSetting.getStringValue(),'getStringValue');
  7693. locNewValue := RandomString(RandomRange(10,1000));
  7694. AObj.setString(locProp,locNewValue); // the recorder should keep the first recorded old values
  7695. locSetting := locCS.getOldValue(AObj,locProp);
  7696. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7697. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7698. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7699. CheckEquals(locOldState.Value.StringValue^,locSetting.getStringValue(),'getStringValue');
  7700. finally
  7701. Dispose(locOldState.Value.StringValue);
  7702. end;
  7703. end;
  7704. procedure TSDODataObjectCS_Test.create_default_props();
  7705. var
  7706. locObj : ISDODataObject;
  7707. locCS : ISDOChangeSummary;
  7708. begin
  7709. locObj := FFactory.createNew(s_uri,s_type_object_A);
  7710. locCS := locObj.getChangeSummary();
  7711. CheckNotEquals(PtrUInt(nil),PtrUInt(locCS), 'getChangeSummary()');
  7712. CheckEquals(False, locCS.isLogging());
  7713. end;
  7714. class function TSDODataObjectCS_Test.Create_Factory(): ISDODataFactory;
  7715. var
  7716. locFactory : ISDODataFactory;
  7717. procedure Add_Objects(const AUri : string);
  7718. var
  7719. locObj : ISDOType;
  7720. begin
  7721. locFactory.AddType(AUri,s_type_object_C,[]);
  7722. locObj := locFactory.getType(AUri,s_type_object_C);
  7723. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  7724. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  7725. {$IFDEF HAS_SDO_BYTES}
  7726. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  7727. {$ENDIF HAS_SDO_BYTES}
  7728. {$IFDEF HAS_SDO_CHAR}
  7729. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  7730. {$ENDIF HAS_SDO_CHAR}
  7731. {$IFDEF HAS_SDO_CURRENCY}
  7732. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  7733. {$ENDIF HAS_SDO_CURRENCY}
  7734. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  7735. {$IFDEF HAS_SDO_DOUBLE}
  7736. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  7737. {$ENDIF HAS_SDO_DOUBLE}
  7738. {$IFDEF HAS_SDO_FLOAT}
  7739. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  7740. {$ENDIF HAS_SDO_FLOAT}
  7741. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  7742. {$IFDEF HAS_SDO_LONG}
  7743. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  7744. {$ENDIF HAS_SDO_LONG}
  7745. {$IFDEF HAS_SDO_SHORT}
  7746. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  7747. {$ENDIF HAS_SDO_SHORT}
  7748. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  7749. locFactory.AddType(AUri,s_type_object_B,[]);
  7750. locObj := locFactory.getType(AUri,s_type_object_B);
  7751. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  7752. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  7753. {$IFDEF HAS_SDO_BYTES}
  7754. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  7755. {$ENDIF HAS_SDO_BYTES}
  7756. {$IFDEF HAS_SDO_CHAR}
  7757. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  7758. {$ENDIF HAS_SDO_CHAR}
  7759. {$IFDEF HAS_SDO_CURRENCY}
  7760. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  7761. {$ENDIF HAS_SDO_CURRENCY}
  7762. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  7763. {$IFDEF HAS_SDO_DOUBLE}
  7764. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  7765. {$ENDIF HAS_SDO_DOUBLE}
  7766. {$IFDEF HAS_SDO_FLOAT}
  7767. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  7768. {$ENDIF HAS_SDO_FLOAT}
  7769. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  7770. {$IFDEF HAS_SDO_LONG}
  7771. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  7772. {$ENDIF HAS_SDO_LONG}
  7773. {$IFDEF HAS_SDO_SHORT}
  7774. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  7775. {$ENDIF HAS_SDO_SHORT}
  7776. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  7777. locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_C,[pfIsContainment]);
  7778. locFactory.AddType(AUri,s_type_object_A,[]);
  7779. locObj := locFactory.getType(AUri,s_type_object_A);
  7780. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  7781. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  7782. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  7783. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], [pfIsMany]);
  7784. {$IFDEF HAS_SDO_BYTES}
  7785. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  7786. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  7787. {$ENDIF HAS_SDO_BYTES}
  7788. {$IFDEF HAS_SDO_CHAR}
  7789. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  7790. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  7791. {$ENDIF HAS_SDO_CHAR}
  7792. {$IFDEF HAS_SDO_CURRENCY}
  7793. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  7794. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  7795. {$ENDIF HAS_SDO_CURRENCY}
  7796. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  7797. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], [pfIsMany]);
  7798. {$IFDEF HAS_SDO_DOUBLE}
  7799. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  7800. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  7801. {$ENDIF HAS_SDO_DOUBLE}
  7802. {$IFDEF HAS_SDO_FLOAT}
  7803. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  7804. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  7805. {$ENDIF HAS_SDO_FLOAT}
  7806. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  7807. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  7808. {$IFDEF HAS_SDO_LONG}
  7809. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  7810. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  7811. {$ENDIF HAS_SDO_LONG}
  7812. {$IFDEF HAS_SDO_SHORT}
  7813. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  7814. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  7815. {$ENDIF HAS_SDO_SHORT}
  7816. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  7817. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  7818. locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_B,[pfIsContainment]);
  7819. locFactory.addProperty(locObj,s_object_ref_prop,s_uri,s_type_object_B,[]);
  7820. locFactory.addProperty(locObj,s_changesummary_prop,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  7821. end;
  7822. begin
  7823. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  7824. Add_Objects(s_uri);
  7825. Result := locFactory;
  7826. end;
  7827. procedure TSDODataObjectCS_Test.getChangeSummary();
  7828. var
  7829. locA, locB, locC : ISDODataObject;
  7830. begin
  7831. locA := FFactory.createNew(s_uri,s_type_object_A);
  7832. locB := FFactory.createNew(s_uri,s_type_object_B);
  7833. locC := FFactory.createNew(s_uri,s_type_object_C);
  7834. CheckNotEquals(PtrUInt(nil), PtrUInt(locA.getChangeSummary()));
  7835. CheckEquals(PtrUInt(nil), PtrUInt(locB.getChangeSummary()));
  7836. CheckEquals(PtrUInt(nil), PtrUInt(locB.getChangeSummary()));
  7837. locA.setDataObject(s_object_prop,locB);
  7838. CheckNotEquals(PtrUInt(nil), PtrUInt(locA.getChangeSummary()));
  7839. CheckNotEquals(PtrUInt(nil), PtrUInt(locB.getChangeSummary()));
  7840. CheckEquals(PtrUInt(nil), PtrUInt(locC.getChangeSummary()));
  7841. locB.setDataObject(s_object_prop,locC);
  7842. CheckNotEquals(PtrUInt(nil), PtrUInt(locA.getChangeSummary()));
  7843. CheckNotEquals(PtrUInt(nil), PtrUInt(locB.getChangeSummary()));
  7844. CheckNotEquals(PtrUInt(nil), PtrUInt(locC.getChangeSummary()));
  7845. end;
  7846. procedure TSDODataObjectCS_Test.logging_bool();
  7847. var
  7848. locObj : ISDODataObject;
  7849. begin
  7850. locObj := FFactory.createNew(s_uri,s_type_object_A);
  7851. locObj.getChangeSummary().beginLogging();
  7852. check_bool_logging(locObj,s_bool_prop);
  7853. end;
  7854. procedure TSDODataObjectCS_Test.logging_byte();
  7855. var
  7856. locObj : ISDODataObject;
  7857. begin
  7858. locObj := FFactory.createNew(s_uri,s_type_object_A);
  7859. locObj.getChangeSummary().beginLogging();
  7860. check_byte_logging(locObj,s_byte_prop);
  7861. end;
  7862. procedure TSDODataObjectCS_Test.logging_date();
  7863. var
  7864. locObj : ISDODataObject;
  7865. begin
  7866. locObj := FFactory.createNew(s_uri,s_type_object_A);
  7867. locObj.getChangeSummary().beginLogging();
  7868. check_date_logging(locObj,s_date_prop);
  7869. end;
  7870. procedure TSDODataObjectCS_Test.logging_int();
  7871. var
  7872. locObj : ISDODataObject;
  7873. begin
  7874. locObj := FFactory.createNew(s_uri,s_type_object_A);
  7875. locObj.getChangeSummary().beginLogging();
  7876. check_int_logging(locObj,s_integer_prop);
  7877. end;
  7878. procedure TSDODataObjectCS_Test.logging_string();
  7879. var
  7880. locObj : ISDODataObject;
  7881. begin
  7882. locObj := FFactory.createNew(s_uri,s_type_object_A);
  7883. locObj.getChangeSummary().beginLogging();
  7884. check_string_logging(locObj,s_string_prop);
  7885. end;
  7886. {$IFDEF HAS_SDO_BYTES}
  7887. procedure TSDODataObjectCS_Test.check_bytes_logging(
  7888. const AObj : ISDODataObject;
  7889. const APropName : string
  7890. );
  7891. var
  7892. locProp : ISDOProperty;
  7893. locCS : ISDOChangeSummary;
  7894. locSetting : TValueSetting;
  7895. locNewValue : TSDOBytes;
  7896. locOldState : TValueState;
  7897. begin
  7898. locProp := AObj.getProperty(APropName);
  7899. locCS := AObj.getChangeSummary();
  7900. locNewValue := RandomBytes(100);
  7901. New(locOldState.Value.BytesValue);
  7902. try
  7903. locOldState.Value.BytesValue^ := AObj.getBytes(locProp);
  7904. locOldState.IsSet := AObj.isSet(locProp);
  7905. locOldState.IsNull := AObj.isNull(locProp);
  7906. AObj.setBytes(locProp,locNewValue);
  7907. locSetting := locCS.getOldValue(AObj,locProp);
  7908. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7909. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7910. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7911. CheckEquals(locOldState.Value.BytesValue^,locSetting.getBytesValue(),'getBytesValue');
  7912. locNewValue := RandomBytes(100);
  7913. AObj.setBytes(locProp,locNewValue); // the recorder should keep the first recorded old values
  7914. locSetting := locCS.getOldValue(AObj,locProp);
  7915. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7916. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7917. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7918. CheckEquals(locOldState.Value.BytesValue^,locSetting.getBytesValue(),'getBytesValue');
  7919. finally
  7920. Dispose(locOldState.Value.BytesValue);
  7921. end;
  7922. end;
  7923. procedure TSDODataObjectCS_Test.logging_bytes();
  7924. var
  7925. locObj : ISDODataObject;
  7926. begin
  7927. locObj := FFactory.createNew(s_uri,s_type_object_A);
  7928. locObj.getChangeSummary().beginLogging();
  7929. check_bytes_logging(locObj,s_bytes_prop);
  7930. end;
  7931. {$ENDIF HAS_SDO_BYTES}
  7932. {$IFDEF HAS_SDO_CHAR}
  7933. procedure TSDODataObjectCS_Test.check_char_logging(
  7934. const AObj : ISDODataObject;
  7935. const APropName : string
  7936. );
  7937. var
  7938. locProp : ISDOProperty;
  7939. locCS : ISDOChangeSummary;
  7940. locSetting : TValueSetting;
  7941. locNewValue : TSDOChar;
  7942. locOldState : TValueState;
  7943. begin
  7944. locProp := AObj.getProperty(APropName);
  7945. locCS := AObj.getChangeSummary();
  7946. locNewValue := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  7947. locOldState.Value.CharValue := AObj.getCharacter(locProp);
  7948. locOldState.IsSet := AObj.isSet(locProp);
  7949. locOldState.IsNull := AObj.isNull(locProp);
  7950. AObj.setCharacter(locProp,locNewValue);
  7951. locSetting := locCS.getOldValue(AObj,locProp);
  7952. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7953. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7954. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7955. CheckEquals(locOldState.Value.CharValue,locSetting.getCharacterValue(),'getCharacterValue');
  7956. locNewValue := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  7957. AObj.setCharacter(locProp,locNewValue); // the recorder should keep the first recorded old values
  7958. locSetting := locCS.getOldValue(AObj,locProp);
  7959. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7960. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7961. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7962. CheckEquals(locOldState.Value.CharValue,locSetting.getCharacterValue(),'getCharacterValue');
  7963. end;
  7964. procedure TSDODataObjectCS_Test.logging_char();
  7965. var
  7966. locObj : ISDODataObject;
  7967. begin
  7968. locObj := FFactory.createNew(s_uri,s_type_object_A);
  7969. locObj.getChangeSummary().beginLogging();
  7970. check_char_logging(locObj,s_char_prop);
  7971. end;
  7972. {$ENDIF HAS_SDO_CHAR}
  7973. {$IFDEF HAS_SDO_CURRENCY}
  7974. procedure TSDODataObjectCS_Test.check_currency_logging(
  7975. const AObj : ISDODataObject;
  7976. const APropName : string
  7977. );
  7978. var
  7979. locProp : ISDOProperty;
  7980. locCS : ISDOChangeSummary;
  7981. locSetting : TValueSetting;
  7982. locNewValue : TSDOCurrency;
  7983. locOldState : TValueState;
  7984. begin
  7985. locProp := AObj.getProperty(APropName);
  7986. locCS := AObj.getChangeSummary();
  7987. locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
  7988. locOldState.Value.CurrencyValue := AObj.getCurrency(locProp);
  7989. locOldState.IsSet := AObj.isSet(locProp);
  7990. locOldState.IsNull := AObj.isNull(locProp);
  7991. AObj.setCurrency(locProp,locNewValue);
  7992. locSetting := locCS.getOldValue(AObj,locProp);
  7993. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  7994. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  7995. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  7996. CheckEquals(locOldState.Value.CurrencyValue,locSetting.getCurrencyValue(),'getCurrencyValue');
  7997. locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
  7998. AObj.setCurrency(locProp,locNewValue); // the recorder should keep the first recorded old values
  7999. locSetting := locCS.getOldValue(AObj,locProp);
  8000. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8001. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8002. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8003. CheckEquals(locOldState.Value.CurrencyValue,locSetting.getCurrencyValue(),'getCurrencyValue');
  8004. end;
  8005. procedure TSDODataObjectCS_Test.logging_currency();
  8006. var
  8007. locObj : ISDODataObject;
  8008. begin
  8009. locObj := FFactory.createNew(s_uri,s_type_object_A);
  8010. locObj.getChangeSummary().beginLogging();
  8011. check_currency_logging(locObj,s_currency_prop);
  8012. end;
  8013. {$ENDIF HAS_SDO_CURRENCY}
  8014. {$IFDEF HAS_SDO_DOUBLE}
  8015. procedure TSDODataObjectCS_Test.check_double_logging(
  8016. const AObj : ISDODataObject;
  8017. const APropName : string
  8018. );
  8019. var
  8020. locProp : ISDOProperty;
  8021. locCS : ISDOChangeSummary;
  8022. locSetting : TValueSetting;
  8023. locNewValue : TSDODouble;
  8024. locOldState : TValueState;
  8025. begin
  8026. locProp := AObj.getProperty(APropName);
  8027. locCS := AObj.getChangeSummary();
  8028. locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
  8029. locOldState.Value.DoubleValue := AObj.getDouble(locProp);
  8030. locOldState.IsSet := AObj.isSet(locProp);
  8031. locOldState.IsNull := AObj.isNull(locProp);
  8032. AObj.setDouble(locProp,locNewValue);
  8033. locSetting := locCS.getOldValue(AObj,locProp);
  8034. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8035. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8036. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8037. CheckEquals(locOldState.Value.DoubleValue,locSetting.getDoubleValue(),'getDoubleValue');
  8038. locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
  8039. AObj.setDouble(locProp,locNewValue); // the recorder should keep the first recorded old values
  8040. locSetting := locCS.getOldValue(AObj,locProp);
  8041. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8042. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8043. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8044. CheckEquals(locOldState.Value.DoubleValue,locSetting.getDoubleValue(),'getDoubleValue');
  8045. end;
  8046. procedure TSDODataObjectCS_Test.logging_double();
  8047. var
  8048. locObj : ISDODataObject;
  8049. begin
  8050. locObj := FFactory.createNew(s_uri,s_type_object_A);
  8051. locObj.getChangeSummary().beginLogging();
  8052. check_double_logging(locObj,s_double_prop);
  8053. end;
  8054. {$ENDIF HAS_SDO_DOUBLE}
  8055. {$IFDEF HAS_SDO_FLOAT}
  8056. procedure TSDODataObjectCS_Test.check_float_logging(
  8057. const AObj : ISDODataObject;
  8058. const APropName : string
  8059. );
  8060. var
  8061. locProp : ISDOProperty;
  8062. locCS : ISDOChangeSummary;
  8063. locSetting : TValueSetting;
  8064. locNewValue : TSDOFloat;
  8065. locOldState : TValueState;
  8066. begin
  8067. locProp := AObj.getProperty(APropName);
  8068. locCS := AObj.getChangeSummary();
  8069. locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
  8070. locOldState.Value.FloatValue := AObj.getFloat(locProp);
  8071. locOldState.IsSet := AObj.isSet(locProp);
  8072. locOldState.IsNull := AObj.isNull(locProp);
  8073. AObj.setFloat(locProp,locNewValue);
  8074. locSetting := locCS.getOldValue(AObj,locProp);
  8075. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8076. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8077. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8078. CheckEquals(locOldState.Value.FloatValue,locSetting.getFloatValue(),'getFloatValue');
  8079. locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
  8080. AObj.setFloat(locProp,locNewValue); // the recorder should keep the first recorded old values
  8081. locSetting := locCS.getOldValue(AObj,locProp);
  8082. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8083. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8084. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8085. CheckEquals(locOldState.Value.FloatValue,locSetting.getFloatValue(),'getFloatValue');
  8086. end;
  8087. procedure TSDODataObjectCS_Test.logging_float();
  8088. var
  8089. locObj : ISDODataObject;
  8090. begin
  8091. locObj := FFactory.createNew(s_uri,s_type_object_A);
  8092. locObj.getChangeSummary().beginLogging();
  8093. check_float_logging(locObj,s_float_prop);
  8094. end;
  8095. {$ENDIF HAS_SDO_FLOAT}
  8096. {$IFDEF HAS_SDO_LONG}
  8097. procedure TSDODataObjectCS_Test.check_long_logging(
  8098. const AObj : ISDODataObject;
  8099. const APropName : string
  8100. );
  8101. var
  8102. locProp : ISDOProperty;
  8103. locCS : ISDOChangeSummary;
  8104. locSetting : TValueSetting;
  8105. locNewValue : TSDOLong;
  8106. locOldState : TValueState;
  8107. begin
  8108. locProp := AObj.getProperty(APropName);
  8109. locCS := AObj.getChangeSummary();
  8110. locNewValue := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
  8111. locOldState.Value.LongValue := AObj.getLong(locProp);
  8112. locOldState.IsSet := AObj.isSet(locProp);
  8113. locOldState.IsNull := AObj.isNull(locProp);
  8114. AObj.setLong(locProp,locNewValue);
  8115. locSetting := locCS.getOldValue(AObj,locProp);
  8116. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8117. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8118. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8119. CheckEquals(locOldState.Value.LongValue,locSetting.getLongValue(),'getLongValue');
  8120. locNewValue := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
  8121. AObj.setLong(locProp,locNewValue); // the recorder should keep the first recorded old values
  8122. locSetting := locCS.getOldValue(AObj,locProp);
  8123. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8124. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8125. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8126. CheckEquals(locOldState.Value.LongValue,locSetting.getLongValue(),'getLongValue');
  8127. end;
  8128. procedure TSDODataObjectCS_Test.logging_long();
  8129. var
  8130. locObj : ISDODataObject;
  8131. begin
  8132. locObj := FFactory.createNew(s_uri,s_type_object_A);
  8133. locObj.getChangeSummary().beginLogging();
  8134. check_long_logging(locObj,s_long_prop);
  8135. end;
  8136. {$ENDIF HAS_SDO_LONG}
  8137. {$IFDEF HAS_SDO_SHORT}
  8138. procedure TSDODataObjectCS_Test.check_short_logging(
  8139. const AObj : ISDODataObject;
  8140. const APropName : string
  8141. );
  8142. var
  8143. locProp : ISDOProperty;
  8144. locCS : ISDOChangeSummary;
  8145. locSetting : TValueSetting;
  8146. locNewValue : TSDOShort;
  8147. locOldState : TValueState;
  8148. begin
  8149. locProp := AObj.getProperty(APropName);
  8150. locCS := AObj.getChangeSummary();
  8151. locNewValue := RandomRange(Low(TSDOShort),High(TSDOShort));
  8152. locOldState.Value.ShortValue := AObj.getShort(locProp);
  8153. locOldState.IsSet := AObj.isSet(locProp);
  8154. locOldState.IsNull := AObj.isNull(locProp);
  8155. AObj.setShort(locProp,locNewValue);
  8156. locSetting := locCS.getOldValue(AObj,locProp);
  8157. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8158. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8159. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8160. CheckEquals(locOldState.Value.ShortValue,locSetting.getShortValue(),'getShortValue');
  8161. locNewValue := RandomRange(Low(TSDOShort),High(TSDOShort));
  8162. AObj.setShort(locProp,locNewValue); // the recorder should keep the first recorded old values
  8163. locSetting := locCS.getOldValue(AObj,locProp);
  8164. CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
  8165. CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
  8166. CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
  8167. CheckEquals(locOldState.Value.ShortValue,locSetting.getShortValue(),'getShortValue');
  8168. end;
  8169. procedure TSDODataObjectCS_Test.logging_short();
  8170. var
  8171. locObj : ISDODataObject;
  8172. begin
  8173. locObj := FFactory.createNew(s_uri,s_type_object_A);
  8174. locObj.getChangeSummary().beginLogging();
  8175. check_short_logging(locObj,s_short_prop);
  8176. end;
  8177. {$ENDIF HAS_SDO_SHORT}
  8178. procedure TSDODataObjectCS_Test.SetUp();
  8179. begin
  8180. inherited;
  8181. FFactory := Create_Factory();
  8182. end;
  8183. procedure TSDODataObjectCS_Test.TearDown();
  8184. begin
  8185. FFactory := nil;
  8186. inherited;
  8187. end;
  8188. { TSDOChangeSummaryMultiValueProps_Test }
  8189. procedure TSDOChangeSummaryMultiValueProps_Test.CheckEquals(expected,
  8190. actual: TSDODate; msg: string; const AStrict: Boolean);
  8191. var
  8192. e, a : TDateTime;
  8193. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  8194. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  8195. begin
  8196. if AStrict then begin
  8197. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  8198. end else begin
  8199. e := NormalizeToUTC(expected);
  8200. a := NormalizeToUTC(actual);
  8201. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  8202. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  8203. CheckEquals(e_y,a_y,msg);
  8204. CheckEquals(e_m,a_m,msg);
  8205. CheckEquals(e_d,a_d,msg);
  8206. CheckEquals(e_h,a_h,msg);
  8207. CheckEquals(e_mn,a_mn,msg);
  8208. CheckEquals(e_ss,a_ss,msg);
  8209. CheckEquals(e_ms,a_ms,msg);
  8210. end;
  8211. end;
  8212. procedure TSDOChangeSummaryMultiValueProps_Test.getChangedDataObjects_contained_delete_multiprop_1();
  8213. var
  8214. locFac : ISDODataFactory;
  8215. locPL, locPJ0, locPJ1, locP1, locP2, locP3 : ISDODataObject;
  8216. locCS : ISDOChangeSummary;
  8217. i : PtrInt;
  8218. ls : ISDOChangedDataObjectList;
  8219. begin
  8220. locFac := TSDODataFactory.Create() as ISDODataFactory;
  8221. locFac.AddType(s_uri,'ProjectList',[]);
  8222. locFac.AddType(s_uri,'ProjectType',[]);
  8223. locFac.AddType(s_uri,'Person',[]);
  8224. locFac.addProperty(s_uri,'ProjectList','Project',s_uri,'ProjectType',[pfIsContainment,pfIsMany]);
  8225. locFac.addProperty(s_uri,'ProjectList',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  8226. locFac.addProperty(s_uri,'ProjectType','Member',s_uri,'Person',[pfIsContainment,pfIsMany]);
  8227. locFac.addProperty(s_uri,'Person','Manager',s_uri,'Person',[]);
  8228. locFac.addProperty(s_uri,'Person','Name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  8229. locPL := locFac.createNew(s_uri,'ProjectList');
  8230. locCS := locPL.getChangeSummary();
  8231. locCS.endLogging();
  8232. locPJ0 := locPL.createDataObject('Project');
  8233. locPL.getList('Project').append(locPJ0);
  8234. locPJ1 := locPL.createDataObject('Project');
  8235. locPL.getList('Project').append(locPJ1);
  8236. locP1 := locPJ1.createDataObject('Member');
  8237. locPJ1.getList('Member').append(locP1);
  8238. locP1.setString('Name', 'P1 person');
  8239. locP2 := locPJ1.createDataObject('Member');
  8240. locPJ1.getList('Member').append(locP2);
  8241. locP2.setString('Name', 'P2 person');
  8242. locP2.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P1 person"]'));
  8243. locP3 := locPJ1.createDataObject('Member');
  8244. locPJ1.getList('Member').append(locP3);
  8245. locP3.setString('Name', 'P3 person');
  8246. locP1.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P3 person"]'));
  8247. locCS.beginLogging();
  8248. //locPJ2 := locPL
  8249. locPL.getList('Project').delete(1);
  8250. ls := locCS.getChangedDataObjects();
  8251. i := IndexOf(locP1,ls);
  8252. Check( ( i < 0 ) or ( Ord(ls.getType(i)) = Ord(ctDelete) ) );
  8253. Check(locCS.isDeleted(locPJ1));
  8254. i := IndexOf(locP2,ls);
  8255. Check( ( i < 0 ) or ( Ord(ls.getType(i)) = Ord(ctDelete) ) );
  8256. Check(locCS.isDeleted(locPJ1));
  8257. end;
  8258. procedure TSDOChangeSummaryMultiValueProps_Test.getChangedDataObjects_contained_delete_multiprop_2;
  8259. var
  8260. locFac : ISDODataFactory;
  8261. locA, locB, locC : ISDODataObject;
  8262. locCS : ISDOChangeSummary;
  8263. ls : ISDOChangedDataObjectList;
  8264. begin
  8265. locFac := TSDODataFactory.Create() as ISDODataFactory;
  8266. locFac.AddType(s_uri,'a',[]);
  8267. locFac.AddType(s_uri,'b',[]);
  8268. locFac.AddType(s_uri,'c',[]);
  8269. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  8270. locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment,pfIsMany]);
  8271. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  8272. locA := locFac.createNew(s_uri,'a');
  8273. locCS := locA.getChangeSummary();
  8274. locCS.endLogging();
  8275. locB := locA.createDataObject('p_ab');
  8276. locCS.beginLogging();
  8277. locC := locFac.createNew(s_uri,'c');
  8278. locB.getList('p_bc').append(locC);
  8279. locA.setDataObject('p_ab',nil);
  8280. ls := locCS.getChangedDataObjects();
  8281. CheckEquals(2, ls.size());
  8282. end;
  8283. procedure TSDOChangeSummaryMultiValueProps_Test.getChangedDataObjects_contained_delete_multiprop_3();
  8284. var
  8285. locFac : ISDODataFactory;
  8286. locA, locB, locC : ISDODataObject;
  8287. locCS : ISDOChangeSummary;
  8288. ls : ISDOChangedDataObjectList;
  8289. begin
  8290. locFac := TSDODataFactory.Create() as ISDODataFactory;
  8291. locFac.AddType(s_uri,'a',[]);
  8292. locFac.AddType(s_uri,'b',[]);
  8293. locFac.AddType(s_uri,'c',[]);
  8294. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment,pfIsMany]);
  8295. locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment,pfIsMany]);
  8296. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  8297. locA := locFac.createNew(s_uri,'a');
  8298. locCS := locA.getChangeSummary();
  8299. locCS.endLogging();
  8300. locB := locA.createDataObject('p_ab');
  8301. locA.getList('p_ab').append(locB);
  8302. locCS.beginLogging();
  8303. locC := locFac.createNew(s_uri,'c');
  8304. locB.getList('p_bc').append(locC);
  8305. locA.getList('p_ab').delete(0);
  8306. ls := locCS.getChangedDataObjects();
  8307. CheckEquals(2, ls.size());
  8308. end;
  8309. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_bool();
  8310. const
  8311. LOCAL_PROP = s_bool_propList;
  8312. procedure check_empty_list(const AList : ISDOSettingList);
  8313. begin
  8314. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  8315. CheckEquals(0, AList.size());
  8316. end;
  8317. var
  8318. x : ISDODataObject;
  8319. cs : ISDOChangeSummary;
  8320. ls : ISDOSettingList;
  8321. vls : ISDODataObjectList;
  8322. vvals : array of TSDOBoolean;
  8323. vvals_length, i : PtrInt;
  8324. s : TValueSetting;
  8325. begin
  8326. Randomize();
  8327. x := FFactory.createNew(s_uri,s_type_object_A);
  8328. cs := x.getChangeSummary();
  8329. check_empty_list(cs.getOldValues(x));
  8330. vvals_length := RandomRange(1,100);
  8331. SetLength(vvals,vvals_length);
  8332. try
  8333. for i := 0 to Pred(vvals_length) do
  8334. vvals[i] := ( ( RandomRange(-1234,56789) mod 3 ) = 0 );
  8335. vls := x.getList(LOCAL_PROP);
  8336. for i := 0 to Pred(vvals_length) do
  8337. vls.append(vvals[i]);
  8338. check_empty_list(cs.getOldValues(x));
  8339. cs.beginLogging();
  8340. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  8341. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8342. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  8343. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
  8344. vls.setBoolean(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
  8345. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8346. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  8347. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8348. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8349. ls := cs.getOldValues(x);
  8350. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  8351. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  8352. for i := 0 to Pred(vvals_length) do begin
  8353. s := ls.getItem(i);
  8354. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  8355. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  8356. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  8357. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  8358. CheckEquals(vvals[i], s.getBooleanValue(), Format('i = %d; getBooleanValue',[i]));
  8359. end;
  8360. finally
  8361. SetLength(vvals,0);
  8362. end;
  8363. end;
  8364. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_byte;
  8365. const
  8366. LOCAL_PROP = s_byte_propList;
  8367. procedure check_empty_list(const AList : ISDOSettingList);
  8368. begin
  8369. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  8370. CheckEquals(0, AList.size());
  8371. end;
  8372. var
  8373. x : ISDODataObject;
  8374. cs : ISDOChangeSummary;
  8375. ls : ISDOSettingList;
  8376. vls : ISDODataObjectList;
  8377. vvals : array of TSDOByte;
  8378. vvals_length, i : PtrInt;
  8379. s : TValueSetting;
  8380. begin
  8381. Randomize();
  8382. x := FFactory.createNew(s_uri,s_type_object_A);
  8383. cs := x.getChangeSummary();
  8384. check_empty_list(cs.getOldValues(x));
  8385. vvals_length := RandomRange(1,100);
  8386. SetLength(vvals,vvals_length);
  8387. try
  8388. for i := 0 to Pred(vvals_length) do
  8389. vvals[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
  8390. vls := x.getList(LOCAL_PROP);
  8391. for i := 0 to Pred(vvals_length) do
  8392. vls.append(vvals[i]);
  8393. check_empty_list(cs.getOldValues(x));
  8394. cs.beginLogging();
  8395. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  8396. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8397. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  8398. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
  8399. vls.setByte(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
  8400. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8401. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  8402. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8403. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8404. ls := cs.getOldValues(x);
  8405. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  8406. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  8407. for i := 0 to Pred(vvals_length) do begin
  8408. s := ls.getItem(i);
  8409. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  8410. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  8411. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  8412. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  8413. CheckEquals(vvals[i], s.getByteValue(), Format('i = %d; getByteValue',[i]));
  8414. end;
  8415. finally
  8416. SetLength(vvals,0);
  8417. end;
  8418. end;
  8419. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_date();
  8420. const
  8421. LOCAL_PROP = s_date_propList;
  8422. procedure check_empty_list(const AList : ISDOSettingList);
  8423. begin
  8424. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  8425. CheckEquals(0, AList.size());
  8426. end;
  8427. var
  8428. x : ISDODataObject;
  8429. cs : ISDOChangeSummary;
  8430. ls : ISDOSettingList;
  8431. vls : ISDODataObjectList;
  8432. vvals : array of TSDODateTime;
  8433. vvals_length, i : PtrInt;
  8434. s : TValueSetting;
  8435. begin
  8436. Randomize();
  8437. x := FFactory.createNew(s_uri,s_type_object_A);
  8438. cs := x.getChangeSummary();
  8439. check_empty_list(cs.getOldValues(x));
  8440. vvals_length := RandomRange(1,100);
  8441. SetLength(vvals,vvals_length);
  8442. try
  8443. for i := 0 to Pred(vvals_length) do
  8444. vvals[i] := RandomDate();
  8445. vls := x.getList(LOCAL_PROP);
  8446. for i := 0 to Pred(vvals_length) do
  8447. vls.append(vvals[i]);
  8448. check_empty_list(cs.getOldValues(x));
  8449. cs.beginLogging();
  8450. vls.append(RandomDate());
  8451. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8452. vls.append(RandomDate());
  8453. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
  8454. vls.setDate(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
  8455. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8456. vls.append(RandomDate());
  8457. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8458. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8459. ls := cs.getOldValues(x);
  8460. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  8461. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  8462. for i := 0 to Pred(vvals_length) do begin
  8463. s := ls.getItem(i);
  8464. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  8465. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  8466. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  8467. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  8468. CheckEquals(vvals[i], s.getDateValue(), Format('i = %d; getDateValue',[i]));
  8469. end;
  8470. finally
  8471. SetLength(vvals,0);
  8472. end;
  8473. end;
  8474. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_integer;
  8475. const
  8476. LOCAL_PROP = s_integer_propList;
  8477. procedure check_empty_list(const AList : ISDOSettingList);
  8478. begin
  8479. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  8480. CheckEquals(0, AList.size());
  8481. end;
  8482. var
  8483. x : ISDODataObject;
  8484. cs : ISDOChangeSummary;
  8485. ls : ISDOSettingList;
  8486. vls : ISDODataObjectList;
  8487. vvals : array of TSDOInteger;
  8488. vvals_length, i : PtrInt;
  8489. s : TValueSetting;
  8490. begin
  8491. Randomize();
  8492. x := FFactory.createNew(s_uri,s_type_object_A);
  8493. cs := x.getChangeSummary();
  8494. check_empty_list(cs.getOldValues(x));
  8495. vvals_length := RandomRange(1,100);
  8496. SetLength(vvals,vvals_length);
  8497. try
  8498. for i := 0 to Pred(vvals_length) do
  8499. vvals[i] := RandomRange(-1234,56789);
  8500. vls := x.getList(LOCAL_PROP);
  8501. for i := 0 to Pred(vvals_length) do
  8502. vls.append(vvals[i]);
  8503. check_empty_list(cs.getOldValues(x));
  8504. cs.beginLogging();
  8505. vls.append(RandomRange(-1234,56789));
  8506. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8507. vls.append(RandomRange(-1234,56789));
  8508. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
  8509. vls.setInteger(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
  8510. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8511. vls.append(RandomRange(-1234,56789));
  8512. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8513. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8514. ls := cs.getOldValues(x);
  8515. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  8516. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  8517. for i := 0 to Pred(vvals_length) do begin
  8518. s := ls.getItem(i);
  8519. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  8520. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  8521. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  8522. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  8523. CheckEquals(vvals[i], s.getIntegerValue(), Format('i = %d; getIntegerValue',[i]));
  8524. end;
  8525. finally
  8526. SetLength(vvals,0);
  8527. end;
  8528. end;
  8529. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_objects();
  8530. const
  8531. LOCAL_PROP = s_Employee;
  8532. function create_factory () : ISDODataFactory;
  8533. var
  8534. locFac : ISDODataFactory;
  8535. begin
  8536. locFac := TSDODataFactory.Create() as ISDODataFactory;
  8537. locFac.AddType(s_uri,s_EmployeeType,[]);
  8538. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  8539. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  8540. locFac.AddType(s_uri,s_Department,[]);
  8541. locFac.addProperty(s_uri,s_Department,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  8542. locFac.addProperty(s_uri,s_Department,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  8543. locFac.addProperty(s_uri,s_Department,s_Employee,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  8544. locFac.addProperty(s_uri,s_Department,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  8545. Result := locFac;
  8546. end;
  8547. procedure check_empty_list(const AList : ISDOSettingList);
  8548. begin
  8549. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  8550. CheckEquals(0, AList.size());
  8551. end;
  8552. function create_employee(
  8553. const AFac : ISDODataFactory;
  8554. const AName, ASN : TSDOString
  8555. ) : ISDODataObject;
  8556. begin
  8557. Result := AFac.createNew(s_uri, s_EmployeeType);
  8558. Result.setString(s_name, AName);
  8559. Result.setString(s_sn, ASN);
  8560. end;
  8561. procedure check_employee_equal(const A, B : ISDODataObject; const AMsgPrefix : string);
  8562. begin
  8563. Check(
  8564. ( ( A = nil ) and ( B = nil ) ) or
  8565. ( ( A <> nil ) and ( B <> nil ) ),
  8566. AMsgPrefix
  8567. );
  8568. if ( A <> nil ) then begin
  8569. CheckEquals(A.getString(s_name), B.getString(s_name), Format('%s %s',[AMsgPrefix, s_name]));
  8570. CheckEquals(A.getString(s_sn), B.getString(s_sn), Format('%s %s',[AMsgPrefix, s_sn]));
  8571. end;
  8572. end;
  8573. var
  8574. locFac : ISDODataFactory;
  8575. x : ISDODataObject;
  8576. cs : ISDOChangeSummary;
  8577. ls : ISDOSettingList;
  8578. vls : ISDODataObjectList;
  8579. vvals : array of ISDODataObject;
  8580. vvals_length, i : PtrInt;
  8581. s : TValueSetting;
  8582. begin
  8583. Randomize();
  8584. locFac := create_factory();
  8585. x := locFac.createNew(s_uri,s_Department);
  8586. cs := x.getChangeSummary();
  8587. check_empty_list(cs.getOldValues(x));
  8588. vvals_length := RandomRange(1,100);
  8589. SetLength(vvals,vvals_length);
  8590. try
  8591. for i := 0 to Pred(vvals_length) do
  8592. vvals[i] := create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100)));
  8593. vls := x.getList(LOCAL_PROP);
  8594. for i := 0 to Pred(vvals_length) do
  8595. vls.append(vvals[i]);
  8596. check_empty_list(cs.getOldValues(x));
  8597. cs.beginLogging();
  8598. vls.append(create_employee(locFac, 'sdo', '001'));
  8599. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8600. vls.append(create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  8601. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  8602. vls.setDataObject(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  8603. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8604. vls.append(create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  8605. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8606. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  8607. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8608. ls := cs.getOldValues(x);
  8609. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  8610. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  8611. for i := 0 to Pred(vvals_length) do begin
  8612. s := ls.getItem(i);
  8613. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  8614. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  8615. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  8616. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  8617. check_employee_equal(vvals[i],s.getDataObjectValue(), Format('Object[%d]',[i]));
  8618. CheckEquals(True, TSDOEqualityHelper.equal(vvals[i],s.getDataObjectValue()), Format('i = %d; getDataObjectValue',[i]));
  8619. end;
  8620. finally
  8621. SetLength(vvals,0);
  8622. end;
  8623. end;
  8624. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_string();
  8625. const
  8626. LOCAL_PROP = s_string_propList;
  8627. procedure check_empty_list(const AList : ISDOSettingList);
  8628. begin
  8629. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  8630. CheckEquals(0, AList.size());
  8631. end;
  8632. var
  8633. x : ISDODataObject;
  8634. cs : ISDOChangeSummary;
  8635. ls : ISDOSettingList;
  8636. vls : ISDODataObjectList;
  8637. vvals : array of TSDOString;
  8638. vvals_length, i : PtrInt;
  8639. s : TValueSetting;
  8640. begin
  8641. Randomize();
  8642. x := FFactory.createNew(s_uri,s_type_object_A);
  8643. cs := x.getChangeSummary();
  8644. check_empty_list(cs.getOldValues(x));
  8645. vvals_length := RandomRange(1,100);
  8646. SetLength(vvals,vvals_length);
  8647. try
  8648. for i := 0 to Pred(vvals_length) do
  8649. vvals[i] := RandomString(RandomRange(0,100));
  8650. vls := x.getList(LOCAL_PROP);
  8651. for i := 0 to Pred(vvals_length) do
  8652. vls.append(vvals[i]);
  8653. check_empty_list(cs.getOldValues(x));
  8654. cs.beginLogging();
  8655. vls.append(RandomString(RandomRange(0,100)));
  8656. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8657. vls.append(RandomString(RandomRange(0,100)));
  8658. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
  8659. vls.setString(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
  8660. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8661. vls.append(RandomString(RandomRange(0,100)));
  8662. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8663. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8664. ls := cs.getOldValues(x);
  8665. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  8666. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  8667. for i := 0 to Pred(vvals_length) do begin
  8668. s := ls.getItem(i);
  8669. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  8670. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  8671. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  8672. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  8673. CheckEquals(vvals[i], s.getStringValue(), Format('i = %d; getStringValue',[i]));
  8674. end;
  8675. finally
  8676. SetLength(vvals,0);
  8677. end;
  8678. end;
  8679. procedure TSDOChangeSummaryMultiValueProps_Test.isDeleted();
  8680. var
  8681. f : ISDODataFactory;
  8682. a, b0, b1, b2 : ISDODataObject;
  8683. ls : ISDODataObjectList;
  8684. cs : ISDOChangeSummary;
  8685. begin
  8686. f := TSDODataFactory.Create();
  8687. f.AddType(s_uri,'a',[]);
  8688. f.AddType(s_uri,'b',[]);
  8689. f.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsMany,pfIsContainment]);
  8690. f.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  8691. a := f.createNew(s_uri,'a');
  8692. ls := a.getList('p_ab');
  8693. cs := a.getChangeSummary();
  8694. cs.endLogging();
  8695. b0 := a.createDataObject('p_ab');
  8696. ls.append(b0);
  8697. cs.beginLogging();
  8698. b1 := a.createDataObject('p_ab');
  8699. ls.append(b1);
  8700. b2 := a.createDataObject('p_ab');
  8701. ls.append(b2);
  8702. ls.delete(1);
  8703. CheckEquals(False, cs.isDeleted(b0));
  8704. CheckEquals(False, cs.isDeleted(b1), 'Because it has been created when the cs where ON');
  8705. CheckEquals(False, cs.isDeleted(b2));
  8706. ls.delete(0);
  8707. CheckEquals(True, cs.isDeleted(b0));
  8708. CheckEquals(False, cs.isDeleted(b1), 'Because it has been created when the cs where ON');
  8709. CheckEquals(False, cs.isDeleted(b2));
  8710. end;
  8711. procedure TSDOChangeSummaryMultiValueProps_Test.isDeleted_nested();
  8712. var
  8713. f : ISDODataFactory;
  8714. a, b0, b1, b2 : ISDODataObject;
  8715. c01, c02 : ISDODataObject;
  8716. ls : ISDODataObjectList;
  8717. cs : ISDOChangeSummary;
  8718. begin
  8719. f := TSDODataFactory.Create();
  8720. f.AddType(s_uri,'a',[]);
  8721. f.AddType(s_uri,'b',[]);
  8722. f.AddType(s_uri,'c',[]);
  8723. f.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsMany,pfIsContainment]);
  8724. f.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsMany,pfIsContainment]);
  8725. f.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  8726. a := f.createNew(s_uri,'a');
  8727. ls := a.getList('p_ab');
  8728. cs := a.getChangeSummary();
  8729. cs.endLogging();
  8730. b0 := a.createDataObject('p_ab');
  8731. ls.append(b0);
  8732. c01 := b0.createDataObject('p_bc'); b0.getList('p_bc').append(c01);
  8733. c02 := b0.createDataObject('p_bc'); b0.getList('p_bc').append(c02);
  8734. cs.beginLogging();
  8735. b1 := a.createDataObject('p_ab'); ls.append(b1);
  8736. b2 := a.createDataObject('p_ab'); ls.append(b2);
  8737. ls.delete(1);
  8738. CheckEquals(False, cs.isDeleted(b0));
  8739. CheckEquals(False, cs.isDeleted(b1), 'Because it has been created when the cs where ON');
  8740. CheckEquals(False, cs.isDeleted(b2));
  8741. ls.delete(0);
  8742. CheckEquals(True, cs.isDeleted(b0));
  8743. CheckEquals(False, cs.isDeleted(b1), 'Because it has been created when the cs where ON');
  8744. CheckEquals(False, cs.isDeleted(b2));
  8745. end;
  8746. procedure TSDOChangeSummaryMultiValueProps_Test.SetUp();
  8747. var
  8748. locFactory : ISDODataFactory;
  8749. procedure Add_ObjectA(const AUri : string);
  8750. var
  8751. locObj : ISDOType;
  8752. begin
  8753. locFactory.AddType(AUri,s_type_object_A,[]);
  8754. locObj := locFactory.getType(AUri,s_type_object_A);
  8755. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  8756. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  8757. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  8758. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  8759. {$IFDEF HAS_SDO_BYTES}
  8760. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  8761. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  8762. {$ENDIF HAS_SDO_BYTES}
  8763. {$IFDEF HAS_SDO_CHAR}
  8764. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  8765. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  8766. {$ENDIF HAS_SDO_CHAR}
  8767. {$IFDEF HAS_SDO_CURRENCY}
  8768. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  8769. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  8770. {$ENDIF HAS_SDO_CURRENCY}
  8771. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  8772. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  8773. {$IFDEF HAS_SDO_DOUBLE}
  8774. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  8775. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  8776. {$ENDIF HAS_SDO_DOUBLE}
  8777. {$IFDEF HAS_SDO_FLOAT}
  8778. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  8779. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  8780. {$ENDIF HAS_SDO_FLOAT}
  8781. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  8782. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  8783. {$IFDEF HAS_SDO_LONG}
  8784. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  8785. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  8786. {$ENDIF HAS_SDO_LONG}
  8787. {$IFDEF HAS_SDO_SHORT}
  8788. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  8789. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  8790. {$ENDIF HAS_SDO_SHORT}
  8791. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  8792. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  8793. locFactory.addProperty(locObj,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  8794. end;
  8795. begin
  8796. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  8797. Add_ObjectA(s_uri);
  8798. FFactory := locFactory;
  8799. end;
  8800. procedure TSDOChangeSummaryMultiValueProps_Test.TearDown();
  8801. begin
  8802. FFactory := nil;
  8803. inherited;
  8804. end;
  8805. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_bool();
  8806. const
  8807. LOCAL_PROP = s_bool_propList;
  8808. var
  8809. x : ISDODataObject;
  8810. cs : ISDOChangeSummary;
  8811. vls : ISDODataObjectList;
  8812. vvals : array of TSDOBoolean;
  8813. vvals_length, i : PtrInt;
  8814. begin
  8815. Randomize();
  8816. x := FFactory.createNew(s_uri,s_type_object_A);
  8817. cs := x.getChangeSummary();
  8818. vvals_length := RandomRange(1,100);
  8819. SetLength(vvals,vvals_length);
  8820. try
  8821. for i := 0 to Pred(vvals_length) do
  8822. vvals[i] := ( RandomRange(-1234,56789) mod 3 ) = 0;
  8823. vls := x.getList(LOCAL_PROP);
  8824. for i := 0 to Pred(vvals_length) do
  8825. vls.append(vvals[i]);
  8826. cs.beginLogging();
  8827. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  8828. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8829. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  8830. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
  8831. vls.setBoolean(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
  8832. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8833. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  8834. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8835. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8836. cs.undoChanges();
  8837. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  8838. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  8839. for i := 0 to Pred(vvals_length) do begin
  8840. CheckEquals(vvals[i], vls.getBoolean(i), Format('Index = %d',[i]));
  8841. end;
  8842. finally
  8843. SetLength(vvals,0);
  8844. end;
  8845. end;
  8846. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_bool_deleted;
  8847. var
  8848. locFac : ISDODataFactory;
  8849. locA : ISDODataObject;
  8850. locCS : ISDOChangeSummary;
  8851. begin
  8852. locFac := TSDODataFactory.Create() as ISDODataFactory;
  8853. locFac.AddType(s_uri,'a',[]);
  8854. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  8855. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  8856. locA := locFac.createNew(s_uri,'a');
  8857. locA.getList('p_ab').append(True);
  8858. locCS := locA.getChangeSummary();
  8859. locCS.beginLogging();
  8860. locA.getList('p_ab').delete(0);
  8861. locCS.getOldValues(locA);
  8862. locA := locFac.createNew(s_uri,'a');
  8863. locA.getList('p_ab').append(True);
  8864. locA.getList('p_ab').append(False);
  8865. locCS := locA.getChangeSummary();
  8866. locCS.beginLogging();
  8867. locA.getList('p_ab').delete(1);
  8868. locCS.getOldValues(locA);
  8869. locA := locFac.createNew(s_uri,'a');
  8870. locA.getList('p_ab').append(True);
  8871. locA.getList('p_ab').append(False);
  8872. locA.getList('p_ab').append(False);
  8873. locA.getList('p_ab').append(True);
  8874. locCS := locA.getChangeSummary();
  8875. locCS.beginLogging();
  8876. locA.getList('p_ab').delete(3);
  8877. locCS.getOldValues(locA);
  8878. end;
  8879. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_byte();
  8880. const
  8881. LOCAL_PROP = s_byte_propList;
  8882. var
  8883. x : ISDODataObject;
  8884. cs : ISDOChangeSummary;
  8885. vls : ISDODataObjectList;
  8886. vvals : array of TSDOByte;
  8887. vvals_length, i : PtrInt;
  8888. begin
  8889. Randomize();
  8890. x := FFactory.createNew(s_uri,s_type_object_A);
  8891. cs := x.getChangeSummary();
  8892. vvals_length := RandomRange(1,100);
  8893. SetLength(vvals,vvals_length);
  8894. try
  8895. for i := 0 to Pred(vvals_length) do
  8896. vvals[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
  8897. vls := x.getList(LOCAL_PROP);
  8898. for i := 0 to Pred(vvals_length) do
  8899. vls.append(vvals[i]);
  8900. cs.beginLogging();
  8901. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  8902. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8903. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  8904. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
  8905. vls.setByte(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
  8906. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8907. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  8908. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8909. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8910. cs.undoChanges();
  8911. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  8912. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  8913. for i := 0 to Pred(vvals_length) do begin
  8914. CheckEquals(vvals[i], vls.getByte(i), Format('Index = %d',[i]));
  8915. end;
  8916. finally
  8917. SetLength(vvals,0);
  8918. end;
  8919. end;
  8920. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_byte_deleted();
  8921. var
  8922. locFac : ISDODataFactory;
  8923. locA : ISDODataObject;
  8924. locCS : ISDOChangeSummary;
  8925. begin
  8926. locFac := TSDODataFactory.Create() as ISDODataFactory;
  8927. locFac.AddType(s_uri,'a',[]);
  8928. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  8929. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  8930. locA := locFac.createNew(s_uri,'a');
  8931. locA.getList('p_ab').append(TSDOByte(123));
  8932. locCS := locA.getChangeSummary();
  8933. locCS.beginLogging();
  8934. locA.getList('p_ab').delete(0);
  8935. locCS.getOldValues(locA);
  8936. locA := locFac.createNew(s_uri,'a');
  8937. locA.getList('p_ab').append(TSDOByte(23));
  8938. locA.getList('p_ab').append(TSDOByte(45));
  8939. locCS := locA.getChangeSummary();
  8940. locCS.beginLogging();
  8941. locA.getList('p_ab').delete(1);
  8942. locCS.getOldValues(locA);
  8943. locA := locFac.createNew(s_uri,'a');
  8944. locA.getList('p_ab').append(TSDOByte(12));
  8945. locA.getList('p_ab').append(TSDOByte(23));
  8946. locA.getList('p_ab').append(TSDOByte(45));
  8947. locA.getList('p_ab').append(TSDOByte(67));
  8948. locCS := locA.getChangeSummary();
  8949. locCS.beginLogging();
  8950. locA.getList('p_ab').delete(3);
  8951. locCS.getOldValues(locA);
  8952. end;
  8953. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_date();
  8954. const
  8955. LOCAL_PROP = s_date_propList;
  8956. var
  8957. x : ISDODataObject;
  8958. cs : ISDOChangeSummary;
  8959. vls : ISDODataObjectList;
  8960. vvals : array of TSDODateTime;
  8961. vvals_length, i : PtrInt;
  8962. begin
  8963. Randomize();
  8964. x := FFactory.createNew(s_uri,s_type_object_A);
  8965. cs := x.getChangeSummary();
  8966. vvals_length := RandomRange(1,100);
  8967. SetLength(vvals,vvals_length);
  8968. try
  8969. for i := 0 to Pred(vvals_length) do
  8970. vvals[i] := RandomDate();
  8971. vls := x.getList(LOCAL_PROP);
  8972. for i := 0 to Pred(vvals_length) do
  8973. vls.append(vvals[i]);
  8974. cs.beginLogging();
  8975. vls.append(RandomDate());
  8976. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8977. vls.append(RandomDate());
  8978. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
  8979. vls.setDate(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
  8980. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8981. vls.append(RandomDate());
  8982. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8983. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  8984. cs.undoChanges();
  8985. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  8986. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  8987. for i := 0 to Pred(vvals_length) do begin
  8988. CheckEquals(vvals[i], vls.getDate(i), Format('Index = %d',[i]));
  8989. end;
  8990. finally
  8991. SetLength(vvals,0);
  8992. end;
  8993. end;
  8994. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_date_deleted();
  8995. var
  8996. locFac : ISDODataFactory;
  8997. locA : ISDODataObject;
  8998. locCS : ISDOChangeSummary;
  8999. begin
  9000. locFac := TSDODataFactory.Create() as ISDODataFactory;
  9001. locFac.AddType(s_uri,'a',[]);
  9002. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  9003. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  9004. locA := locFac.createNew(s_uri,'a');
  9005. locA.getList('p_ab').append(RandomDate());
  9006. locCS := locA.getChangeSummary();
  9007. locCS.beginLogging();
  9008. locA.getList('p_ab').delete(0);
  9009. locCS.getOldValues(locA);
  9010. locA := locFac.createNew(s_uri,'a');
  9011. locA.getList('p_ab').append(RandomDate());
  9012. locA.getList('p_ab').append(RandomDate());
  9013. locCS := locA.getChangeSummary();
  9014. locCS.beginLogging();
  9015. locA.getList('p_ab').delete(1);
  9016. locCS.getOldValues(locA);
  9017. locA := locFac.createNew(s_uri,'a');
  9018. locA.getList('p_ab').append(RandomDate());
  9019. locA.getList('p_ab').append(RandomDate());
  9020. locA.getList('p_ab').append(RandomDate());
  9021. locA.getList('p_ab').append(RandomDate());
  9022. locCS := locA.getChangeSummary();
  9023. locCS.beginLogging();
  9024. locA.getList('p_ab').delete(3);
  9025. locCS.getOldValues(locA);
  9026. end;
  9027. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_integer();
  9028. const
  9029. LOCAL_PROP = s_integer_propList;
  9030. var
  9031. x : ISDODataObject;
  9032. cs : ISDOChangeSummary;
  9033. vls : ISDODataObjectList;
  9034. vvals : array of TSDOInteger;
  9035. vvals_length, i : PtrInt;
  9036. begin
  9037. Randomize();
  9038. x := FFactory.createNew(s_uri,s_type_object_A);
  9039. cs := x.getChangeSummary();
  9040. vvals_length := RandomRange(1,100);
  9041. SetLength(vvals,vvals_length);
  9042. try
  9043. for i := 0 to Pred(vvals_length) do
  9044. vvals[i] := RandomRange(-1234,56789);
  9045. vls := x.getList(LOCAL_PROP);
  9046. for i := 0 to Pred(vvals_length) do
  9047. vls.append(vvals[i]);
  9048. cs.beginLogging();
  9049. vls.append(RandomRange(-1234,56789));
  9050. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9051. vls.append(RandomRange(-1234,56789));
  9052. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
  9053. vls.setInteger(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
  9054. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9055. vls.append(RandomRange(-1234,56789));
  9056. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9057. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9058. cs.undoChanges();
  9059. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9060. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  9061. for i := 0 to Pred(vvals_length) do begin
  9062. CheckEquals(vvals[i], vls.getInteger(i), Format('Index = %d',[i]));
  9063. end;
  9064. finally
  9065. SetLength(vvals,0);
  9066. end;
  9067. end;
  9068. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_integer_deleted();
  9069. var
  9070. locFac : ISDODataFactory;
  9071. locA : ISDODataObject;
  9072. locCS : ISDOChangeSummary;
  9073. begin
  9074. locFac := TSDODataFactory.Create() as ISDODataFactory;
  9075. locFac.AddType(s_uri,'a',[]);
  9076. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  9077. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  9078. locA := locFac.createNew(s_uri,'a');
  9079. locA.getList('p_ab').append(1210);
  9080. locCS := locA.getChangeSummary();
  9081. locCS.beginLogging();
  9082. locA.getList('p_ab').delete(0);
  9083. locCS.getOldValues(locA);
  9084. locA := locFac.createNew(s_uri,'a');
  9085. locA.getList('p_ab').append(23);
  9086. locA.getList('p_ab').append(45);
  9087. locCS := locA.getChangeSummary();
  9088. locCS.beginLogging();
  9089. locA.getList('p_ab').delete(1);
  9090. locCS.getOldValues(locA);
  9091. locA := locFac.createNew(s_uri,'a');
  9092. locA.getList('p_ab').append(12);
  9093. locA.getList('p_ab').append(23);
  9094. locA.getList('p_ab').append(45);
  9095. locA.getList('p_ab').append(67);
  9096. locCS := locA.getChangeSummary();
  9097. locCS.beginLogging();
  9098. locA.getList('p_ab').delete(3);
  9099. locCS.getOldValues(locA);
  9100. end;
  9101. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_bool();
  9102. var
  9103. f : ISDODataFactory;
  9104. x, y : ISDODataObject;
  9105. cs : ISDOChangeSummary;
  9106. vls : ISDODataObjectList;
  9107. vvals_a : array of TSDOBoolean;
  9108. vvals_a_length, i : PtrInt;
  9109. vvals_b : array of TSDOBoolean;
  9110. vvals_b_length : PtrInt;
  9111. begin
  9112. Randomize();
  9113. f := TSDODataFactory.Create();
  9114. f.AddType(s_uri, 'a', []);
  9115. f.AddType(s_uri, 'b', []);
  9116. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], []);
  9117. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[BooleanType], [pfIsMany]);
  9118. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  9119. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  9120. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[BooleanType], [pfIsMany]);
  9121. x := f.createNew(s_uri,'a');
  9122. x.setInteger('p_i', RandomRange(-1234,56789));
  9123. y := x.createDataObject('p_ab');
  9124. cs := x.getChangeSummary();
  9125. vvals_a_length := RandomRange(1,100);
  9126. vvals_b_length := RandomRange(1,100);
  9127. SetLength(vvals_a,vvals_a_length);
  9128. try
  9129. for i := 0 to Pred(vvals_a_length) do
  9130. vvals_a[i] := ( RandomRange(-1234,56789) mod 3 ) = 0;
  9131. SetLength(vvals_b,vvals_b_length);
  9132. for i := 0 to Pred(vvals_b_length) do
  9133. vvals_b[i] := ( RandomRange(-1234,56789) mod 3 ) = 0;
  9134. vls := x.getList('p_li');
  9135. for i := 0 to Pred(vvals_a_length) do
  9136. vls.append(vvals_a[i]);
  9137. vls := y.getList('p_b_li');
  9138. for i := 0 to Pred(vvals_b_length) do
  9139. vls.append(vvals_b[i]);
  9140. cs.beginLogging();
  9141. vls := x.getList('p_li');
  9142. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  9143. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9144. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  9145. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
  9146. vls.setBoolean(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
  9147. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9148. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  9149. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9150. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9151. vls := y.getList('p_b_li');
  9152. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
  9153. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9154. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  9155. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9156. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  9157. vls.setBoolean(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
  9158. vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
  9159. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9160. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9161. cs.undoChanges();
  9162. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9163. vls := x.getList('p_li');
  9164. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  9165. for i := 0 to Pred(vvals_a_length) do begin
  9166. CheckEquals(vvals_a[i], vls.getBoolean(i), Format('x, Index = %d',[i]));
  9167. end;
  9168. vls := y.getList('p_b_li');
  9169. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  9170. for i := 0 to Pred(vvals_b_length) do begin
  9171. CheckEquals(vvals_b[i], vls.getBoolean(i), Format('y, Index = %d',[i]));
  9172. end;
  9173. finally
  9174. SetLength(vvals_b,0);
  9175. SetLength(vvals_a,0);
  9176. end;
  9177. end;
  9178. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_byte();
  9179. const
  9180. PROP_TYPE = ByteType;
  9181. var
  9182. f : ISDODataFactory;
  9183. x, y : ISDODataObject;
  9184. cs : ISDOChangeSummary;
  9185. vls : ISDODataObjectList;
  9186. vvals_a : array of TSDOByte;
  9187. vvals_a_length, i : PtrInt;
  9188. vvals_b : array of TSDOByte;
  9189. vvals_b_length : PtrInt;
  9190. begin
  9191. Randomize();
  9192. f := TSDODataFactory.Create();
  9193. f.AddType(s_uri, 'a', []);
  9194. f.AddType(s_uri, 'b', []);
  9195. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
  9196. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  9197. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  9198. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  9199. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  9200. x := f.createNew(s_uri,'a');
  9201. x.setByte('p_i', RandomRange(Low(TSDOByte),High(TSDOByte)));
  9202. y := x.createDataObject('p_ab');
  9203. cs := x.getChangeSummary();
  9204. vvals_a_length := RandomRange(1,100);
  9205. vvals_b_length := RandomRange(1,100);
  9206. SetLength(vvals_a,vvals_a_length);
  9207. try
  9208. for i := 0 to Pred(vvals_a_length) do
  9209. vvals_a[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
  9210. SetLength(vvals_b,vvals_b_length);
  9211. for i := 0 to Pred(vvals_b_length) do
  9212. vvals_b[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
  9213. vls := x.getList('p_li');
  9214. for i := 0 to Pred(vvals_a_length) do
  9215. vls.append(vvals_a[i]);
  9216. vls := y.getList('p_b_li');
  9217. for i := 0 to Pred(vvals_b_length) do
  9218. vls.append(vvals_b[i]);
  9219. cs.beginLogging();
  9220. vls := x.getList('p_li');
  9221. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  9222. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9223. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  9224. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
  9225. vls.setByte(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
  9226. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9227. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  9228. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9229. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9230. vls := y.getList('p_b_li');
  9231. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
  9232. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9233. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  9234. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9235. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  9236. vls.setByte(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
  9237. vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
  9238. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9239. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9240. cs.undoChanges();
  9241. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9242. vls := x.getList('p_li');
  9243. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  9244. for i := 0 to Pred(vvals_a_length) do begin
  9245. CheckEquals(vvals_a[i], vls.getByte(i), Format('x, Index = %d',[i]));
  9246. end;
  9247. vls := y.getList('p_b_li');
  9248. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  9249. for i := 0 to Pred(vvals_b_length) do begin
  9250. CheckEquals(vvals_b[i], vls.getByte(i), Format('y, Index = %d',[i]));
  9251. end;
  9252. finally
  9253. SetLength(vvals_b,0);
  9254. SetLength(vvals_a,0);
  9255. end;
  9256. end;
  9257. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_date();
  9258. var
  9259. f : ISDODataFactory;
  9260. x, y : ISDODataObject;
  9261. cs : ISDOChangeSummary;
  9262. vls : ISDODataObjectList;
  9263. vvals_a : array of TSDODateTime;
  9264. vvals_a_length, i : PtrInt;
  9265. vvals_b : array of TSDODateTime;
  9266. vvals_b_length : PtrInt;
  9267. begin
  9268. Randomize();
  9269. f := TSDODataFactory.Create();
  9270. f.AddType(s_uri, 'a', []);
  9271. f.AddType(s_uri, 'b', []);
  9272. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[DateTimeType], []);
  9273. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[DateTimeType], [pfIsMany]);
  9274. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  9275. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  9276. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[DateTimeType], [pfIsMany]);
  9277. x := f.createNew(s_uri,'a');
  9278. x.setDate('p_i', RandomDate());
  9279. y := x.createDataObject('p_ab');
  9280. cs := x.getChangeSummary();
  9281. vvals_a_length := RandomRange(1,100);
  9282. vvals_b_length := RandomRange(1,100);
  9283. SetLength(vvals_a,vvals_a_length);
  9284. try
  9285. for i := 0 to Pred(vvals_a_length) do
  9286. vvals_a[i] := RandomDate();
  9287. SetLength(vvals_b,vvals_b_length);
  9288. for i := 0 to Pred(vvals_b_length) do
  9289. vvals_b[i] := RandomDate();
  9290. vls := x.getList('p_li');
  9291. for i := 0 to Pred(vvals_a_length) do
  9292. vls.append(vvals_a[i]);
  9293. vls := y.getList('p_b_li');
  9294. for i := 0 to Pred(vvals_b_length) do
  9295. vls.append(vvals_b[i]);
  9296. cs.beginLogging();
  9297. vls := x.getList('p_li');
  9298. vls.append(RandomDate());
  9299. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9300. vls.append(RandomDate());
  9301. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
  9302. vls.setDate(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
  9303. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9304. vls.append(RandomDate());
  9305. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9306. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9307. vls := y.getList('p_b_li');
  9308. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
  9309. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9310. vls.append(RandomDate());
  9311. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9312. vls.append(RandomDate());
  9313. vls.setDate(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
  9314. vls.append(RandomDate());
  9315. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9316. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9317. cs.undoChanges();
  9318. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9319. vls := x.getList('p_li');
  9320. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  9321. for i := 0 to Pred(vvals_a_length) do begin
  9322. CheckEquals(vvals_a[i], vls.getDate(i), Format('x, Index = %d',[i]));
  9323. end;
  9324. vls := y.getList('p_b_li');
  9325. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  9326. for i := 0 to Pred(vvals_b_length) do begin
  9327. CheckEquals(vvals_b[i], vls.getDate(i), Format('y, Index = %d',[i]));
  9328. end;
  9329. finally
  9330. SetLength(vvals_b,0);
  9331. SetLength(vvals_a,0);
  9332. end;
  9333. end;
  9334. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_integer();
  9335. var
  9336. f : ISDODataFactory;
  9337. x, y : ISDODataObject;
  9338. cs : ISDOChangeSummary;
  9339. vls : ISDODataObjectList;
  9340. vvals_a : array of TSDOInteger;
  9341. vvals_a_length, i : PtrInt;
  9342. vvals_b : array of TSDOInteger;
  9343. vvals_b_length : PtrInt;
  9344. begin
  9345. Randomize();
  9346. f := TSDODataFactory.Create();
  9347. f.AddType(s_uri, 'a', []);
  9348. f.AddType(s_uri, 'b', []);
  9349. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], []);
  9350. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], [pfIsMany]);
  9351. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  9352. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  9353. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], [pfIsMany]);
  9354. x := f.createNew(s_uri,'a');
  9355. x.setInteger('p_i', RandomRange(-1234,56789));
  9356. y := x.createDataObject('p_ab');
  9357. cs := x.getChangeSummary();
  9358. vvals_a_length := RandomRange(1,100);
  9359. vvals_b_length := RandomRange(1,100);
  9360. SetLength(vvals_a,vvals_a_length);
  9361. try
  9362. for i := 0 to Pred(vvals_a_length) do
  9363. vvals_a[i] := RandomRange(-1234,56789);
  9364. SetLength(vvals_b,vvals_b_length);
  9365. for i := 0 to Pred(vvals_b_length) do
  9366. vvals_b[i] := RandomRange(-1234,56789);
  9367. vls := x.getList('p_li');
  9368. for i := 0 to Pred(vvals_a_length) do
  9369. vls.append(vvals_a[i]);
  9370. vls := y.getList('p_b_li');
  9371. for i := 0 to Pred(vvals_b_length) do
  9372. vls.append(vvals_b[i]);
  9373. cs.beginLogging();
  9374. vls := x.getList('p_li');
  9375. vls.append(RandomRange(-1234,56789));
  9376. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9377. vls.append(RandomRange(-1234,56789));
  9378. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
  9379. vls.setInteger(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
  9380. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9381. vls.append(RandomRange(-1234,56789));
  9382. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9383. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9384. vls := y.getList('p_b_li');
  9385. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
  9386. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9387. vls.append(RandomRange(-1234,56789));
  9388. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9389. vls.append(RandomRange(-1234,56789));
  9390. vls.setInteger(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
  9391. vls.append(RandomRange(-1234,56789));
  9392. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9393. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9394. cs.undoChanges();
  9395. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9396. vls := x.getList('p_li');
  9397. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  9398. for i := 0 to Pred(vvals_a_length) do begin
  9399. CheckEquals(vvals_a[i], vls.getInteger(i), Format('x, Index = %d',[i]));
  9400. end;
  9401. vls := y.getList('p_b_li');
  9402. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  9403. for i := 0 to Pred(vvals_b_length) do begin
  9404. CheckEquals(vvals_b[i], vls.getInteger(i), Format('y, Index = %d',[i]));
  9405. end;
  9406. finally
  9407. SetLength(vvals_b,0);
  9408. SetLength(vvals_a,0);
  9409. end;
  9410. end;
  9411. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_object();
  9412. function create_e1(const AFac : ISDODataFactory) : ISDODataObject;
  9413. begin
  9414. Result := AFac.createNew(s_uri, 'e_1');
  9415. Result.setString('p_e1', RandomString(RandomRange(0,100)));
  9416. end;
  9417. function create_e2(const AFac : ISDODataFactory) : ISDODataObject;
  9418. begin
  9419. Result := AFac.createNew(s_uri, 'e_2');
  9420. Result.setString('p_e2', RandomString(RandomRange(0,100)));
  9421. end;
  9422. procedure check_e1_equal(const A, B : ISDODataObject; const AMsgPrefix : string);
  9423. begin
  9424. Check(
  9425. ( ( A = nil ) and ( B = nil ) ) or
  9426. ( ( A <> nil ) and ( B <> nil ) ),
  9427. AMsgPrefix
  9428. );
  9429. if ( A <> nil ) then begin
  9430. CheckEquals(True, TSDOEqualityHelper.equal(A.getDataObject('p_e1'), B.getDataObject('p_e1')), Format('%s %s',[AMsgPrefix, s_name]));
  9431. end;
  9432. end;
  9433. procedure check_e2_equal(const A, B : ISDODataObject; const AMsgPrefix : string);
  9434. begin
  9435. Check(
  9436. ( ( A = nil ) and ( B = nil ) ) or
  9437. ( ( A <> nil ) and ( B <> nil ) ),
  9438. AMsgPrefix
  9439. );
  9440. if ( A <> nil ) then begin
  9441. CheckEquals(True, TSDOEqualityHelper.equal(A.getDataObject('p_e2'), B.getDataObject('p_e2')), Format('%s %s',[AMsgPrefix, s_name]));
  9442. end;
  9443. end;
  9444. var
  9445. f : ISDODataFactory;
  9446. x, y : ISDODataObject;
  9447. cs : ISDOChangeSummary;
  9448. vls : ISDODataObjectList;
  9449. vvals_a : array of ISDODataObject;
  9450. vvals_a_length, i : PtrInt;
  9451. vvals_b : array of ISDODataObject;
  9452. vvals_b_length : PtrInt;
  9453. begin
  9454. Randomize();
  9455. f := TSDODataFactory.Create();
  9456. f.AddType(s_uri, 'e_1', []);
  9457. f.AddType(s_uri, 'e_2', []);
  9458. f.AddType(s_uri, 'a', []);
  9459. f.AddType(s_uri, 'b', []);
  9460. f.addProperty(s_uri, 'e_1', 'p_e1', sdo_namespace, SDOTypeDefaultTypeNames[StringType], []);
  9461. f.addProperty(s_uri, 'e_2', 'p_e2', sdo_namespace, SDOTypeDefaultTypeNames[StringType], []);
  9462. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], []);
  9463. f.addProperty(s_uri, 'a', 'p_li', s_uri, 'e_1', [pfIsMany,pfIsContainment]);
  9464. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  9465. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  9466. f.addProperty(s_uri, 'b', 'p_b_li', s_uri, 'e_2', [pfIsMany,pfIsContainment]);
  9467. x := f.createNew(s_uri,'a');
  9468. x.setInteger('p_i', RandomRange(-1234,56789));
  9469. y := x.createDataObject('p_ab');
  9470. cs := x.getChangeSummary();
  9471. vvals_a_length := RandomRange(1,100);
  9472. vvals_b_length := RandomRange(1,100);
  9473. SetLength(vvals_a,vvals_a_length);
  9474. try
  9475. for i := 0 to Pred(vvals_a_length) do
  9476. vvals_a[i] := create_e1(f);
  9477. SetLength(vvals_b,vvals_b_length);
  9478. for i := 0 to Pred(vvals_b_length) do
  9479. vvals_b[i] := create_e2(f);
  9480. vls := x.getList('p_li');
  9481. for i := 0 to Pred(vvals_a_length) do
  9482. vls.append(vvals_a[i]);
  9483. vls := y.getList('p_b_li');
  9484. for i := 0 to Pred(vvals_b_length) do
  9485. vls.append(vvals_b[i]);
  9486. cs.beginLogging();
  9487. vls := x.getList('p_li');
  9488. vls.append(create_e1(f));
  9489. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9490. vls.append(create_e1(f));
  9491. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_e1(f));
  9492. vls.setDataObject(RandomRange(0, ( vls.size() - 1 ) ), create_e1(f));
  9493. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9494. vls.append(create_e1(f));
  9495. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9496. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9497. vls := y.getList('p_b_li');
  9498. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_e2(f));
  9499. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9500. vls.append(create_e2(f));
  9501. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9502. vls.append(create_e2(f));
  9503. vls.setDataObject(RandomRange(0, ( vls.size() - 1 ) ), create_e2(f));
  9504. vls.append(create_e2(f));
  9505. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9506. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9507. cs.undoChanges();
  9508. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9509. vls := x.getList('p_li');
  9510. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  9511. for i := 0 to Pred(vvals_a_length) do begin
  9512. check_e1_equal(vvals_a[i], vls.getDataObject(i), Format('x, Index = %d',[i]));
  9513. end;
  9514. vls := y.getList('p_b_li');
  9515. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  9516. for i := 0 to Pred(vvals_b_length) do begin
  9517. check_e2_equal(vvals_b[i], vls.getDataObject(i), Format('y, Index = %d',[i]));
  9518. end;
  9519. finally
  9520. SetLength(vvals_b,0);
  9521. SetLength(vvals_a,0);
  9522. end;
  9523. end;
  9524. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_string();
  9525. var
  9526. f : ISDODataFactory;
  9527. x, y : ISDODataObject;
  9528. cs : ISDOChangeSummary;
  9529. vls : ISDODataObjectList;
  9530. vvals_a : array of TSDOString;
  9531. vvals_a_length, i : PtrInt;
  9532. vvals_b : array of TSDOString;
  9533. vvals_b_length : PtrInt;
  9534. begin
  9535. Randomize();
  9536. f := TSDODataFactory.Create();
  9537. f.AddType(s_uri, 'a', []);
  9538. f.AddType(s_uri, 'b', []);
  9539. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], []);
  9540. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[StringType], [pfIsMany]);
  9541. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  9542. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  9543. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[stringType], [pfIsMany]);
  9544. x := f.createNew(s_uri,'a');
  9545. x.setInteger('p_i', RandomRange(-1234,56789));
  9546. y := x.createDataObject('p_ab');
  9547. cs := x.getChangeSummary();
  9548. vvals_a_length := RandomRange(1,100);
  9549. vvals_b_length := RandomRange(1,100);
  9550. SetLength(vvals_a,vvals_a_length);
  9551. try
  9552. for i := 0 to Pred(vvals_a_length) do
  9553. vvals_a[i] := RandomString(RandomRange(0,100));
  9554. SetLength(vvals_b,vvals_b_length);
  9555. for i := 0 to Pred(vvals_b_length) do
  9556. vvals_b[i] := RandomString(RandomRange(0,100));
  9557. vls := x.getList('p_li');
  9558. for i := 0 to Pred(vvals_a_length) do
  9559. vls.append(vvals_a[i]);
  9560. vls := y.getList('p_b_li');
  9561. for i := 0 to Pred(vvals_b_length) do
  9562. vls.append(vvals_b[i]);
  9563. cs.beginLogging();
  9564. vls := x.getList('p_li');
  9565. vls.append(RandomString(RandomRange(0,100)));
  9566. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9567. vls.append(RandomString(RandomRange(0,100)));
  9568. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
  9569. vls.setString(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
  9570. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9571. vls.append(RandomString(RandomRange(0,100)));
  9572. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9573. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9574. vls := y.getList('p_b_li');
  9575. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
  9576. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9577. vls.append(RandomString(RandomRange(0,100)));
  9578. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9579. vls.append(RandomString(RandomRange(0,100)));
  9580. vls.setString(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
  9581. vls.append(RandomString(RandomRange(0,100)));
  9582. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9583. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9584. cs.undoChanges();
  9585. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9586. vls := x.getList('p_li');
  9587. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  9588. for i := 0 to Pred(vvals_a_length) do begin
  9589. CheckEquals(vvals_a[i], vls.getString(i), Format('x, Index = %d',[i]));
  9590. end;
  9591. vls := y.getList('p_b_li');
  9592. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  9593. for i := 0 to Pred(vvals_b_length) do begin
  9594. CheckEquals(vvals_b[i], vls.getString(i), Format('y, Index = %d',[i]));
  9595. end;
  9596. finally
  9597. SetLength(vvals_b,0);
  9598. SetLength(vvals_a,0);
  9599. end;
  9600. end;
  9601. {$IFDEF HAS_SDO_BYTES}
  9602. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_bytes();
  9603. const
  9604. LOCAL_PROP = s_bytes_propList;
  9605. procedure check_empty_list(const AList : ISDOSettingList);
  9606. begin
  9607. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  9608. CheckEquals(0, AList.size());
  9609. end;
  9610. var
  9611. x : ISDODataObject;
  9612. cs : ISDOChangeSummary;
  9613. ls : ISDOSettingList;
  9614. vls : ISDODataObjectList;
  9615. vvals : array of TSDOBytes;
  9616. vvals_length, i : PtrInt;
  9617. s : TValueSetting;
  9618. begin
  9619. Randomize();
  9620. x := FFactory.createNew(s_uri,s_type_object_A);
  9621. cs := x.getChangeSummary();
  9622. check_empty_list(cs.getOldValues(x));
  9623. vvals_length := RandomRange(1,100);
  9624. SetLength(vvals,vvals_length);
  9625. try
  9626. for i := 0 to Pred(vvals_length) do
  9627. vvals[i] := RandomBytes(RandomRange(0,200));
  9628. vls := x.getList(LOCAL_PROP);
  9629. for i := 0 to Pred(vvals_length) do
  9630. vls.appendBytes(vvals[i]);
  9631. check_empty_list(cs.getOldValues(x));
  9632. cs.beginLogging();
  9633. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9634. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9635. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9636. vls.insertBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
  9637. vls.setBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
  9638. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9639. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9640. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9641. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9642. ls := cs.getOldValues(x);
  9643. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  9644. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  9645. for i := 0 to Pred(vvals_length) do begin
  9646. s := ls.getItem(i);
  9647. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  9648. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  9649. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  9650. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  9651. CheckEquals(vvals[i], s.getBytesValue(), Format('i = %d; getBytesValue',[i]));
  9652. end;
  9653. finally
  9654. SetLength(vvals,0);
  9655. end;
  9656. end;
  9657. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_bytes();
  9658. const
  9659. LOCAL_PROP = s_bytes_propList;
  9660. var
  9661. x : ISDODataObject;
  9662. cs : ISDOChangeSummary;
  9663. vls : ISDODataObjectList;
  9664. vvals : array of TSDOBytes;
  9665. vvals_length, i : PtrInt;
  9666. begin
  9667. Randomize();
  9668. x := FFactory.createNew(s_uri,s_type_object_A);
  9669. cs := x.getChangeSummary();
  9670. vvals_length := RandomRange(1,100);
  9671. SetLength(vvals,vvals_length);
  9672. try
  9673. for i := 0 to Pred(vvals_length) do
  9674. vvals[i] := RandomBytes(RandomRange(0,200));
  9675. vls := x.getList(LOCAL_PROP);
  9676. for i := 0 to Pred(vvals_length) do
  9677. vls.appendBytes(vvals[i]);
  9678. cs.beginLogging();
  9679. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9680. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9681. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9682. vls.insertBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
  9683. vls.setBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
  9684. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9685. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9686. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9687. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9688. cs.undoChanges();
  9689. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9690. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  9691. for i := 0 to Pred(vvals_length) do begin
  9692. CheckEquals(vvals[i], vls.getBytes(i), Format('Index = %d',[i]));
  9693. end;
  9694. finally
  9695. SetLength(vvals,0);
  9696. end;
  9697. end;
  9698. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_bytes_deleted();
  9699. var
  9700. locFac : ISDODataFactory;
  9701. locA : ISDODataObject;
  9702. locCS : ISDOChangeSummary;
  9703. begin
  9704. locFac := TSDODataFactory.Create() as ISDODataFactory;
  9705. locFac.AddType(s_uri,'a',[]);
  9706. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  9707. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  9708. locA := locFac.createNew(s_uri,'a');
  9709. locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
  9710. locCS := locA.getChangeSummary();
  9711. locCS.beginLogging();
  9712. locA.getList('p_ab').delete(0);
  9713. locCS.getOldValues(locA);
  9714. locA := locFac.createNew(s_uri,'a');
  9715. locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
  9716. locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
  9717. locCS := locA.getChangeSummary();
  9718. locCS.beginLogging();
  9719. locA.getList('p_ab').delete(1);
  9720. locCS.getOldValues(locA);
  9721. locA := locFac.createNew(s_uri,'a');
  9722. locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
  9723. locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
  9724. locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
  9725. locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
  9726. locCS := locA.getChangeSummary();
  9727. locCS.beginLogging();
  9728. locA.getList('p_ab').delete(3);
  9729. locCS.getOldValues(locA);
  9730. end;
  9731. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_bytes();
  9732. const
  9733. PROP_TYPE = BytesType;
  9734. var
  9735. f : ISDODataFactory;
  9736. x, y : ISDODataObject;
  9737. cs : ISDOChangeSummary;
  9738. vls : ISDODataObjectList;
  9739. vvals_a : array of TSDOBytes;
  9740. vvals_a_length, i : PtrInt;
  9741. vvals_b : array of TSDOBytes;
  9742. vvals_b_length : PtrInt;
  9743. begin
  9744. Randomize();
  9745. f := TSDODataFactory.Create();
  9746. f.AddType(s_uri, 'a', []);
  9747. f.AddType(s_uri, 'b', []);
  9748. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
  9749. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  9750. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  9751. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  9752. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  9753. x := f.createNew(s_uri,'a');
  9754. x.setBytes('p_i', RandomBytes(RandomRange(0,200)));
  9755. y := x.createDataObject('p_ab');
  9756. cs := x.getChangeSummary();
  9757. vvals_a_length := RandomRange(1,100);
  9758. vvals_b_length := RandomRange(1,100);
  9759. SetLength(vvals_a,vvals_a_length);
  9760. try
  9761. for i := 0 to Pred(vvals_a_length) do
  9762. vvals_a[i] := RandomBytes(RandomRange(0,200));
  9763. SetLength(vvals_b,vvals_b_length);
  9764. for i := 0 to Pred(vvals_b_length) do
  9765. vvals_b[i] := RandomBytes(RandomRange(0,200));
  9766. vls := x.getList('p_li');
  9767. for i := 0 to Pred(vvals_a_length) do
  9768. vls.appendBytes(vvals_a[i]);
  9769. vls := y.getList('p_b_li');
  9770. for i := 0 to Pred(vvals_b_length) do
  9771. vls.appendBytes(vvals_b[i]);
  9772. cs.beginLogging();
  9773. vls := x.getList('p_li');
  9774. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9775. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9776. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9777. vls.insertBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
  9778. vls.setBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
  9779. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9780. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9781. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9782. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9783. vls := y.getList('p_b_li');
  9784. vls.insertBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
  9785. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9786. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9787. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9788. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9789. vls.setBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
  9790. vls.appendBytes(RandomBytes(RandomRange(0,200)));
  9791. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9792. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9793. cs.undoChanges();
  9794. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9795. vls := x.getList('p_li');
  9796. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  9797. for i := 0 to Pred(vvals_a_length) do begin
  9798. CheckEquals(vvals_a[i], vls.getBytes(i), Format('x, Index = %d',[i]));
  9799. end;
  9800. vls := y.getList('p_b_li');
  9801. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  9802. for i := 0 to Pred(vvals_b_length) do begin
  9803. CheckEquals(vvals_b[i], vls.getBytes(i), Format('y, Index = %d',[i]));
  9804. end;
  9805. finally
  9806. SetLength(vvals_b,0);
  9807. SetLength(vvals_a,0);
  9808. end;
  9809. end;
  9810. {$ENDIF HAS_SDO_BYTES}
  9811. {$IFDEF HAS_SDO_CHAR}
  9812. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_char();
  9813. const
  9814. LOCAL_PROP = s_char_propList;
  9815. procedure check_empty_list(const AList : ISDOSettingList);
  9816. begin
  9817. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  9818. CheckEquals(0, AList.size());
  9819. end;
  9820. var
  9821. x : ISDODataObject;
  9822. cs : ISDOChangeSummary;
  9823. ls : ISDOSettingList;
  9824. vls : ISDODataObjectList;
  9825. vvals : array of TSDOChar;
  9826. vvals_length, i : PtrInt;
  9827. s : TValueSetting;
  9828. begin
  9829. Randomize();
  9830. x := FFactory.createNew(s_uri,s_type_object_A);
  9831. cs := x.getChangeSummary();
  9832. check_empty_list(cs.getOldValues(x));
  9833. vvals_length := RandomRange(1,100);
  9834. SetLength(vvals,vvals_length);
  9835. try
  9836. for i := 0 to Pred(vvals_length) do
  9837. vvals[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  9838. vls := x.getList(LOCAL_PROP);
  9839. for i := 0 to Pred(vvals_length) do
  9840. vls.append(vvals[i]);
  9841. check_empty_list(cs.getOldValues(x));
  9842. cs.beginLogging();
  9843. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9844. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9845. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9846. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9847. vls.setCharacter(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9848. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9849. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9850. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9851. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9852. ls := cs.getOldValues(x);
  9853. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  9854. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  9855. for i := 0 to Pred(vvals_length) do begin
  9856. s := ls.getItem(i);
  9857. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  9858. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  9859. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  9860. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  9861. CheckEquals(vvals[i], s.getCharacterValue(), Format('i = %d; getCharacterValue',[i]));
  9862. end;
  9863. finally
  9864. SetLength(vvals,0);
  9865. end;
  9866. end;
  9867. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_char();
  9868. const
  9869. LOCAL_PROP = s_char_propList;
  9870. var
  9871. x : ISDODataObject;
  9872. cs : ISDOChangeSummary;
  9873. vls : ISDODataObjectList;
  9874. vvals : array of TSDOChar;
  9875. vvals_length, i : PtrInt;
  9876. begin
  9877. Randomize();
  9878. x := FFactory.createNew(s_uri,s_type_object_A);
  9879. cs := x.getChangeSummary();
  9880. vvals_length := RandomRange(1,100);
  9881. SetLength(vvals,vvals_length);
  9882. try
  9883. for i := 0 to Pred(vvals_length) do
  9884. vvals[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  9885. vls := x.getList(LOCAL_PROP);
  9886. for i := 0 to Pred(vvals_length) do
  9887. vls.append(vvals[i]);
  9888. cs.beginLogging();
  9889. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9890. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9891. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9892. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9893. vls.setCharacter(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9894. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9895. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9896. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9897. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9898. cs.undoChanges();
  9899. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  9900. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  9901. for i := 0 to Pred(vvals_length) do begin
  9902. CheckEquals(vvals[i], vls.getCharacter(i), Format('Index = %d',[i]));
  9903. end;
  9904. finally
  9905. SetLength(vvals,0);
  9906. end;
  9907. end;
  9908. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_char_deleted();
  9909. var
  9910. locFac : ISDODataFactory;
  9911. locA : ISDODataObject;
  9912. locCS : ISDOChangeSummary;
  9913. begin
  9914. locFac := TSDODataFactory.Create() as ISDODataFactory;
  9915. locFac.AddType(s_uri,'a',[]);
  9916. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  9917. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  9918. locA := locFac.createNew(s_uri,'a');
  9919. locA.getList('p_ab').append(TSDOChar('z'));
  9920. locCS := locA.getChangeSummary();
  9921. locCS.beginLogging();
  9922. locA.getList('p_ab').delete(0);
  9923. locCS.getOldValues(locA);
  9924. locA := locFac.createNew(s_uri,'a');
  9925. locA.getList('p_ab').append(TSDOChar('d'));
  9926. locA.getList('p_ab').append(TSDOChar('f'));
  9927. locCS := locA.getChangeSummary();
  9928. locCS.beginLogging();
  9929. locA.getList('p_ab').delete(1);
  9930. locCS.getOldValues(locA);
  9931. locA := locFac.createNew(s_uri,'a');
  9932. locA.getList('p_ab').append(TSDOChar('w'));
  9933. locA.getList('p_ab').append(TSDOChar(#0));
  9934. locA.getList('p_ab').append(TSDOChar('5'));
  9935. locA.getList('p_ab').append(TSDOChar('n'));
  9936. locCS := locA.getChangeSummary();
  9937. locCS.beginLogging();
  9938. locA.getList('p_ab').delete(3);
  9939. locCS.getOldValues(locA);
  9940. end;
  9941. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_char();
  9942. const
  9943. PROP_TYPE = CharacterType;
  9944. var
  9945. f : ISDODataFactory;
  9946. x, y : ISDODataObject;
  9947. cs : ISDOChangeSummary;
  9948. vls : ISDODataObjectList;
  9949. vvals_a : array of TSDOChar;
  9950. vvals_a_length, i : PtrInt;
  9951. vvals_b : array of TSDOChar;
  9952. vvals_b_length : PtrInt;
  9953. begin
  9954. Randomize();
  9955. f := TSDODataFactory.Create();
  9956. f.AddType(s_uri, 'a', []);
  9957. f.AddType(s_uri, 'b', []);
  9958. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
  9959. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  9960. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  9961. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  9962. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  9963. x := f.createNew(s_uri,'a');
  9964. x.setCharacter('p_i', TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9965. y := x.createDataObject('p_ab');
  9966. cs := x.getChangeSummary();
  9967. vvals_a_length := RandomRange(1,100);
  9968. vvals_b_length := RandomRange(1,100);
  9969. SetLength(vvals_a,vvals_a_length);
  9970. try
  9971. for i := 0 to Pred(vvals_a_length) do
  9972. vvals_a[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  9973. SetLength(vvals_b,vvals_b_length);
  9974. for i := 0 to Pred(vvals_b_length) do
  9975. vvals_b[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  9976. vls := x.getList('p_li');
  9977. for i := 0 to Pred(vvals_a_length) do
  9978. vls.append(vvals_a[i]);
  9979. vls := y.getList('p_b_li');
  9980. for i := 0 to Pred(vvals_b_length) do
  9981. vls.append(vvals_b[i]);
  9982. cs.beginLogging();
  9983. vls := x.getList('p_li');
  9984. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9985. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9986. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9987. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9988. vls.setCharacter(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9989. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9990. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9991. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9992. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9993. vls := y.getList('p_b_li');
  9994. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9995. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9996. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9997. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  9998. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  9999. vls.setCharacter(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  10000. vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
  10001. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10002. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10003. cs.undoChanges();
  10004. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10005. vls := x.getList('p_li');
  10006. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  10007. for i := 0 to Pred(vvals_a_length) do begin
  10008. CheckEquals(vvals_a[i], vls.getCharacter(i), Format('x, Index = %d',[i]));
  10009. end;
  10010. vls := y.getList('p_b_li');
  10011. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  10012. for i := 0 to Pred(vvals_b_length) do begin
  10013. CheckEquals(vvals_b[i], vls.getCharacter(i), Format('y, Index = %d',[i]));
  10014. end;
  10015. finally
  10016. SetLength(vvals_b,0);
  10017. SetLength(vvals_a,0);
  10018. end;
  10019. end;
  10020. {$ENDIF HAS_SDO_CHAR}
  10021. {$IFDEF HAS_SDO_CURRENCY}
  10022. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_currency;
  10023. const
  10024. LOCAL_PROP = s_currency_propList;
  10025. procedure check_empty_list(const AList : ISDOSettingList);
  10026. begin
  10027. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  10028. CheckEquals(0, AList.size());
  10029. end;
  10030. var
  10031. x : ISDODataObject;
  10032. cs : ISDOChangeSummary;
  10033. ls : ISDOSettingList;
  10034. vls : ISDODataObjectList;
  10035. vvals : array of TSDOCurrency;
  10036. vvals_length, i : PtrInt;
  10037. s : TValueSetting;
  10038. begin
  10039. Randomize();
  10040. x := FFactory.createNew(s_uri,s_type_object_A);
  10041. cs := x.getChangeSummary();
  10042. check_empty_list(cs.getOldValues(x));
  10043. vvals_length := RandomRange(1,100);
  10044. SetLength(vvals,vvals_length);
  10045. try
  10046. for i := 0 to Pred(vvals_length) do
  10047. vvals[i] := test_suite_utils.RandomRange(Low(Word),High(Word));
  10048. vls := x.getList(LOCAL_PROP);
  10049. for i := 0 to Pred(vvals_length) do
  10050. vls.appendCurrency(vvals[i]);
  10051. check_empty_list(cs.getOldValues(x));
  10052. cs.beginLogging();
  10053. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10054. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10055. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10056. vls.insertCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
  10057. vls.setCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
  10058. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10059. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10060. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10061. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10062. ls := cs.getOldValues(x);
  10063. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  10064. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  10065. for i := 0 to Pred(vvals_length) do begin
  10066. s := ls.getItem(i);
  10067. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  10068. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  10069. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  10070. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  10071. CheckEquals(vvals[i], s.getCurrencyValue(), Format('i = %d; getCurrencyValue',[i]));
  10072. end;
  10073. finally
  10074. SetLength(vvals,0);
  10075. end;
  10076. end;
  10077. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_currency();
  10078. const
  10079. LOCAL_PROP = s_currency_propList;
  10080. var
  10081. x : ISDODataObject;
  10082. cs : ISDOChangeSummary;
  10083. vls : ISDODataObjectList;
  10084. vvals : array of TSDOCurrency;
  10085. vvals_length, i : PtrInt;
  10086. begin
  10087. Randomize();
  10088. x := FFactory.createNew(s_uri,s_type_object_A);
  10089. cs := x.getChangeSummary();
  10090. vvals_length := RandomRange(1,100);
  10091. SetLength(vvals,vvals_length);
  10092. try
  10093. for i := 0 to Pred(vvals_length) do
  10094. vvals[i] := test_suite_utils.RandomRange(Low(Word),High(Word));
  10095. vls := x.getList(LOCAL_PROP);
  10096. for i := 0 to Pred(vvals_length) do
  10097. vls.appendCurrency(vvals[i]);
  10098. cs.beginLogging();
  10099. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10100. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10101. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10102. vls.insertCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
  10103. vls.setCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
  10104. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10105. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10106. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10107. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10108. cs.undoChanges();
  10109. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10110. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  10111. for i := 0 to Pred(vvals_length) do begin
  10112. CheckEquals(vvals[i], vls.getCurrency(i), Format('Index = %d',[i]));
  10113. end;
  10114. finally
  10115. SetLength(vvals,0);
  10116. end;
  10117. end;
  10118. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_currency_deleted();
  10119. const
  10120. CURRENCY_CONT_ARRAY : array[0..6] of TSDOCurrency = (
  10121. 123963244, 23852215, -52245, 1252222, -11122123, -24245, 522552
  10122. );
  10123. var
  10124. locFac : ISDODataFactory;
  10125. locA : ISDODataObject;
  10126. locCS : ISDOChangeSummary;
  10127. begin
  10128. locFac := TSDODataFactory.Create() as ISDODataFactory;
  10129. locFac.AddType(s_uri,'a',[]);
  10130. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  10131. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  10132. locA := locFac.createNew(s_uri,'a');
  10133. locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[0]);
  10134. locCS := locA.getChangeSummary();
  10135. locCS.beginLogging();
  10136. locA.getList('p_ab').delete(0);
  10137. locCS.getOldValues(locA);
  10138. locA := locFac.createNew(s_uri,'a');
  10139. locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[1]);
  10140. locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[2]);
  10141. locCS := locA.getChangeSummary();
  10142. locCS.beginLogging();
  10143. locA.getList('p_ab').delete(1);
  10144. locCS.getOldValues(locA);
  10145. locA := locFac.createNew(s_uri,'a');
  10146. locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[3]);
  10147. locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[4]);
  10148. locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[5]);
  10149. locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[6]);
  10150. locCS := locA.getChangeSummary();
  10151. locCS.beginLogging();
  10152. locA.getList('p_ab').delete(3);
  10153. locCS.getOldValues(locA);
  10154. end;
  10155. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_currency();
  10156. const
  10157. PROP_TYPE = CurrencyType;
  10158. var
  10159. f : ISDODataFactory;
  10160. x, y : ISDODataObject;
  10161. cs : ISDOChangeSummary;
  10162. vls : ISDODataObjectList;
  10163. vvals_a : array of TSDOCurrency;
  10164. vvals_a_length, i : PtrInt;
  10165. vvals_b : array of TSDOCurrency;
  10166. vvals_b_length : PtrInt;
  10167. begin
  10168. Randomize();
  10169. f := TSDODataFactory.Create();
  10170. f.AddType(s_uri, 'a', []);
  10171. f.AddType(s_uri, 'b', []);
  10172. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
  10173. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  10174. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  10175. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  10176. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  10177. x := f.createNew(s_uri,'a');
  10178. x.setCurrency('p_i', test_suite_utils.RandomRange(Low(Word),High(Word)));
  10179. y := x.createDataObject('p_ab');
  10180. cs := x.getChangeSummary();
  10181. vvals_a_length := RandomRange(1,100);
  10182. vvals_b_length := RandomRange(1,100);
  10183. SetLength(vvals_a,vvals_a_length);
  10184. try
  10185. for i := 0 to Pred(vvals_a_length) do
  10186. vvals_a[i] := test_suite_utils.RandomRange(Low(Word),High(Word));
  10187. SetLength(vvals_b,vvals_b_length);
  10188. for i := 0 to Pred(vvals_b_length) do
  10189. vvals_b[i] := test_suite_utils.RandomRange(Low(Word),High(Word));
  10190. vls := x.getList('p_li');
  10191. for i := 0 to Pred(vvals_a_length) do
  10192. vls.appendCurrency(vvals_a[i]);
  10193. vls := y.getList('p_b_li');
  10194. for i := 0 to Pred(vvals_b_length) do
  10195. vls.appendCurrency(vvals_b[i]);
  10196. cs.beginLogging();
  10197. vls := x.getList('p_li');
  10198. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10199. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10200. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10201. vls.insertCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
  10202. vls.setCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
  10203. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10204. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10205. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10206. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10207. vls := y.getList('p_b_li');
  10208. vls.insertCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
  10209. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10210. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10211. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10212. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10213. vls.setCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
  10214. vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
  10215. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10216. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10217. cs.undoChanges();
  10218. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10219. vls := x.getList('p_li');
  10220. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  10221. for i := 0 to Pred(vvals_a_length) do begin
  10222. CheckEquals(vvals_a[i], vls.getCurrency(i), Format('x, Index = %d',[i]));
  10223. end;
  10224. vls := y.getList('p_b_li');
  10225. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  10226. for i := 0 to Pred(vvals_b_length) do begin
  10227. CheckEquals(vvals_b[i], vls.getCurrency(i), Format('y, Index = %d',[i]));
  10228. end;
  10229. finally
  10230. SetLength(vvals_b,0);
  10231. SetLength(vvals_a,0);
  10232. end;
  10233. end;
  10234. {$ENDIF HAS_SDO_CURRENCY}
  10235. {$IFDEF HAS_SDO_DOUBLE}
  10236. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_double;
  10237. const
  10238. LOCAL_PROP = s_double_propList;
  10239. procedure check_empty_list(const AList : ISDOSettingList);
  10240. begin
  10241. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  10242. CheckEquals(0, AList.size());
  10243. end;
  10244. var
  10245. x : ISDODataObject;
  10246. cs : ISDOChangeSummary;
  10247. ls : ISDOSettingList;
  10248. vls : ISDODataObjectList;
  10249. vvals : array of TSDODouble;
  10250. vvals_length, i : PtrInt;
  10251. s : TValueSetting;
  10252. begin
  10253. Randomize();
  10254. x := FFactory.createNew(s_uri,s_type_object_A);
  10255. cs := x.getChangeSummary();
  10256. check_empty_list(cs.getOldValues(x));
  10257. vvals_length := RandomRange(1,100);
  10258. SetLength(vvals,vvals_length);
  10259. try
  10260. for i := 0 to Pred(vvals_length) do
  10261. vvals[i] := RandomDouble(Low(Word),High(Word));
  10262. vls := x.getList(LOCAL_PROP);
  10263. for i := 0 to Pred(vvals_length) do
  10264. vls.append(vvals[i]);
  10265. check_empty_list(cs.getOldValues(x));
  10266. cs.beginLogging();
  10267. vls.append(RandomDouble(Low(Word),High(Word)));
  10268. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10269. vls.append(RandomDouble(Low(Word),High(Word)));
  10270. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
  10271. vls.setDouble(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
  10272. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10273. vls.append(RandomDouble(Low(Word),High(Word)));
  10274. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10275. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10276. ls := cs.getOldValues(x);
  10277. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  10278. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  10279. for i := 0 to Pred(vvals_length) do begin
  10280. s := ls.getItem(i);
  10281. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  10282. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  10283. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  10284. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  10285. CheckEquals(vvals[i], s.getDoubleValue(), Format('i = %d; getDoubleValue',[i]));
  10286. end;
  10287. finally
  10288. SetLength(vvals,0);
  10289. end;
  10290. end;
  10291. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_double();
  10292. const
  10293. LOCAL_PROP = s_double_propList;
  10294. var
  10295. x : ISDODataObject;
  10296. cs : ISDOChangeSummary;
  10297. vls : ISDODataObjectList;
  10298. vvals : array of TSDODouble;
  10299. vvals_length, i : PtrInt;
  10300. begin
  10301. Randomize();
  10302. x := FFactory.createNew(s_uri,s_type_object_A);
  10303. cs := x.getChangeSummary();
  10304. vvals_length := RandomRange(1,100);
  10305. SetLength(vvals,vvals_length);
  10306. try
  10307. for i := 0 to Pred(vvals_length) do
  10308. vvals[i] := RandomDouble(Low(Word),High(Word));
  10309. vls := x.getList(LOCAL_PROP);
  10310. for i := 0 to Pred(vvals_length) do
  10311. vls.append(vvals[i]);
  10312. cs.beginLogging();
  10313. vls.append(RandomDouble(Low(Word),High(Word)));
  10314. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10315. vls.append(RandomDouble(Low(Word),High(Word)));
  10316. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
  10317. vls.setDouble(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
  10318. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10319. vls.append(RandomDouble(Low(Word),High(Word)));
  10320. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10321. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10322. cs.undoChanges();
  10323. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10324. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  10325. for i := 0 to Pred(vvals_length) do begin
  10326. CheckEquals(vvals[i], vls.getDouble(i), Format('Index = %d',[i]));
  10327. end;
  10328. finally
  10329. SetLength(vvals,0);
  10330. end;
  10331. end;
  10332. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_double_deleted();
  10333. const
  10334. DOUBLE_CONT_ARRAY : array[0..6] of TSDODouble = (
  10335. 123963244, 23852215, -52245, 1252222, -11122123, -24245, 522552
  10336. );
  10337. var
  10338. locFac : ISDODataFactory;
  10339. locA : ISDODataObject;
  10340. locCS : ISDOChangeSummary;
  10341. begin
  10342. locFac := TSDODataFactory.Create() as ISDODataFactory;
  10343. locFac.AddType(s_uri,'a',[]);
  10344. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  10345. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  10346. locA := locFac.createNew(s_uri,'a');
  10347. locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[0]);
  10348. locCS := locA.getChangeSummary();
  10349. locCS.beginLogging();
  10350. locA.getList('p_ab').delete(0);
  10351. locCS.getOldValues(locA);
  10352. locA := locFac.createNew(s_uri,'a');
  10353. locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[1]);
  10354. locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[2]);
  10355. locCS := locA.getChangeSummary();
  10356. locCS.beginLogging();
  10357. locA.getList('p_ab').delete(1);
  10358. locCS.getOldValues(locA);
  10359. locA := locFac.createNew(s_uri,'a');
  10360. locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[3]);
  10361. locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[4]);
  10362. locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[5]);
  10363. locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[6]);
  10364. locCS := locA.getChangeSummary();
  10365. locCS.beginLogging();
  10366. locA.getList('p_ab').delete(3);
  10367. locCS.getOldValues(locA);
  10368. end;
  10369. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_double();
  10370. const
  10371. PROP_TYPE = DoubleType;
  10372. var
  10373. f : ISDODataFactory;
  10374. x, y : ISDODataObject;
  10375. cs : ISDOChangeSummary;
  10376. vls : ISDODataObjectList;
  10377. vvals_a : array of TSDODouble;
  10378. vvals_a_length, i : PtrInt;
  10379. vvals_b : array of TSDODouble;
  10380. vvals_b_length : PtrInt;
  10381. begin
  10382. Randomize();
  10383. f := TSDODataFactory.Create();
  10384. f.AddType(s_uri, 'a', []);
  10385. f.AddType(s_uri, 'b', []);
  10386. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
  10387. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  10388. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  10389. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  10390. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  10391. x := f.createNew(s_uri,'a');
  10392. x.setDouble('p_i', RandomDouble(Low(Word),High(Word)));
  10393. y := x.createDataObject('p_ab');
  10394. cs := x.getChangeSummary();
  10395. vvals_a_length := RandomRange(1,100);
  10396. vvals_b_length := RandomRange(1,100);
  10397. SetLength(vvals_a,vvals_a_length);
  10398. try
  10399. for i := 0 to Pred(vvals_a_length) do
  10400. vvals_a[i] := RandomDouble(Low(Word),High(Word));
  10401. SetLength(vvals_b,vvals_b_length);
  10402. for i := 0 to Pred(vvals_b_length) do
  10403. vvals_b[i] := RandomDouble(Low(Word),High(Word));
  10404. vls := x.getList('p_li');
  10405. for i := 0 to Pred(vvals_a_length) do
  10406. vls.append(vvals_a[i]);
  10407. vls := y.getList('p_b_li');
  10408. for i := 0 to Pred(vvals_b_length) do
  10409. vls.append(vvals_b[i]);
  10410. cs.beginLogging();
  10411. vls := x.getList('p_li');
  10412. vls.append(RandomDouble(Low(Word),High(Word)));
  10413. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10414. vls.append(RandomDouble(Low(Word),High(Word)));
  10415. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
  10416. vls.setDouble(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
  10417. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10418. vls.append(RandomDouble(Low(Word),High(Word)));
  10419. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10420. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10421. vls := y.getList('p_b_li');
  10422. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
  10423. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10424. vls.append(RandomDouble(Low(Word),High(Word)));
  10425. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10426. vls.append(RandomDouble(Low(Word),High(Word)));
  10427. vls.setDouble(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
  10428. vls.append(RandomDouble(Low(Word),High(Word)));
  10429. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10430. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10431. cs.undoChanges();
  10432. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10433. vls := x.getList('p_li');
  10434. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  10435. for i := 0 to Pred(vvals_a_length) do begin
  10436. CheckEquals(vvals_a[i], vls.getDouble(i), Format('x, Index = %d',[i]));
  10437. end;
  10438. vls := y.getList('p_b_li');
  10439. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  10440. for i := 0 to Pred(vvals_b_length) do begin
  10441. CheckEquals(vvals_b[i], vls.getDouble(i), Format('y, Index = %d',[i]));
  10442. end;
  10443. finally
  10444. SetLength(vvals_b,0);
  10445. SetLength(vvals_a,0);
  10446. end;
  10447. end;
  10448. {$ENDIF HAS_SDO_DOUBLE}
  10449. {$IFDEF HAS_SDO_FLOAT}
  10450. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_float;
  10451. const
  10452. LOCAL_PROP = s_float_propList;
  10453. procedure check_empty_list(const AList : ISDOSettingList);
  10454. begin
  10455. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  10456. CheckEquals(0, AList.size());
  10457. end;
  10458. var
  10459. x : ISDODataObject;
  10460. cs : ISDOChangeSummary;
  10461. ls : ISDOSettingList;
  10462. vls : ISDODataObjectList;
  10463. vvals : array of TSDOFloat;
  10464. vvals_length, i : PtrInt;
  10465. s : TValueSetting;
  10466. begin
  10467. Randomize();
  10468. x := FFactory.createNew(s_uri,s_type_object_A);
  10469. cs := x.getChangeSummary();
  10470. check_empty_list(cs.getOldValues(x));
  10471. vvals_length := RandomRange(1,100);
  10472. SetLength(vvals,vvals_length);
  10473. try
  10474. for i := 0 to Pred(vvals_length) do
  10475. vvals[i] := RandomFloat(Low(Word),High(Word));
  10476. vls := x.getList(LOCAL_PROP);
  10477. for i := 0 to Pred(vvals_length) do
  10478. vls.append(vvals[i]);
  10479. check_empty_list(cs.getOldValues(x));
  10480. cs.beginLogging();
  10481. vls.append(RandomFloat(Low(Word),High(Word)));
  10482. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10483. vls.append(RandomFloat(Low(Word),High(Word)));
  10484. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
  10485. vls.setFloat(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
  10486. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10487. vls.append(RandomFloat(Low(Word),High(Word)));
  10488. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10489. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10490. ls := cs.getOldValues(x);
  10491. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  10492. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  10493. for i := 0 to Pred(vvals_length) do begin
  10494. s := ls.getItem(i);
  10495. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  10496. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  10497. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  10498. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  10499. CheckEquals(vvals[i], s.getFloatValue(), Format('i = %d; getFloatValue',[i]));
  10500. end;
  10501. finally
  10502. SetLength(vvals,0);
  10503. end;
  10504. end;
  10505. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_float();
  10506. const
  10507. LOCAL_PROP = s_float_propList;
  10508. var
  10509. x : ISDODataObject;
  10510. cs : ISDOChangeSummary;
  10511. vls : ISDODataObjectList;
  10512. vvals : array of TSDOFloat;
  10513. vvals_length, i : PtrInt;
  10514. begin
  10515. Randomize();
  10516. x := FFactory.createNew(s_uri,s_type_object_A);
  10517. cs := x.getChangeSummary();
  10518. vvals_length := RandomRange(1,100);
  10519. SetLength(vvals,vvals_length);
  10520. try
  10521. for i := 0 to Pred(vvals_length) do
  10522. vvals[i] := RandomFloat(Low(Word),High(Word));
  10523. vls := x.getList(LOCAL_PROP);
  10524. for i := 0 to Pred(vvals_length) do
  10525. vls.append(vvals[i]);
  10526. cs.beginLogging();
  10527. vls.append(RandomFloat(Low(Word),High(Word)));
  10528. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10529. vls.append(RandomFloat(Low(Word),High(Word)));
  10530. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
  10531. vls.setFloat(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
  10532. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10533. vls.append(RandomFloat(Low(Word),High(Word)));
  10534. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10535. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10536. cs.undoChanges();
  10537. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10538. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  10539. for i := 0 to Pred(vvals_length) do begin
  10540. CheckEquals(vvals[i], vls.getFloat(i), Format('Index = %d',[i]));
  10541. end;
  10542. finally
  10543. SetLength(vvals,0);
  10544. end;
  10545. end;
  10546. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_float_deleted();
  10547. const
  10548. FLOAT_CONT_ARRAY : array[0..6] of TSDOFloat = (
  10549. 123963244, 23852215, -52245, 1252222, -11122123, -24245, 522552
  10550. );
  10551. var
  10552. locFac : ISDODataFactory;
  10553. locA : ISDODataObject;
  10554. locCS : ISDOChangeSummary;
  10555. begin
  10556. locFac := TSDODataFactory.Create() as ISDODataFactory;
  10557. locFac.AddType(s_uri,'a',[]);
  10558. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  10559. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  10560. locA := locFac.createNew(s_uri,'a');
  10561. locA.getList('p_ab').append(FLOAT_CONT_ARRAY[0]);
  10562. locCS := locA.getChangeSummary();
  10563. locCS.beginLogging();
  10564. locA.getList('p_ab').delete(0);
  10565. locCS.getOldValues(locA);
  10566. locA := locFac.createNew(s_uri,'a');
  10567. locA.getList('p_ab').append(FLOAT_CONT_ARRAY[1]);
  10568. locA.getList('p_ab').append(FLOAT_CONT_ARRAY[2]);
  10569. locCS := locA.getChangeSummary();
  10570. locCS.beginLogging();
  10571. locA.getList('p_ab').delete(1);
  10572. locCS.getOldValues(locA);
  10573. locA := locFac.createNew(s_uri,'a');
  10574. locA.getList('p_ab').append(FLOAT_CONT_ARRAY[3]);
  10575. locA.getList('p_ab').append(FLOAT_CONT_ARRAY[4]);
  10576. locA.getList('p_ab').append(FLOAT_CONT_ARRAY[5]);
  10577. locA.getList('p_ab').append(FLOAT_CONT_ARRAY[6]);
  10578. locCS := locA.getChangeSummary();
  10579. locCS.beginLogging();
  10580. locA.getList('p_ab').delete(3);
  10581. locCS.getOldValues(locA);
  10582. end;
  10583. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_float();
  10584. const
  10585. PROP_TYPE = FloatType;
  10586. var
  10587. f : ISDODataFactory;
  10588. x, y : ISDODataObject;
  10589. cs : ISDOChangeSummary;
  10590. vls : ISDODataObjectList;
  10591. vvals_a : array of TSDOFloat;
  10592. vvals_a_length, i : PtrInt;
  10593. vvals_b : array of TSDOFloat;
  10594. vvals_b_length : PtrInt;
  10595. begin
  10596. Randomize();
  10597. f := TSDODataFactory.Create();
  10598. f.AddType(s_uri, 'a', []);
  10599. f.AddType(s_uri, 'b', []);
  10600. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
  10601. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  10602. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  10603. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  10604. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  10605. x := f.createNew(s_uri,'a');
  10606. x.setFloat('p_i', RandomFloat(Low(Word),High(Word)));
  10607. y := x.createDataObject('p_ab');
  10608. cs := x.getChangeSummary();
  10609. vvals_a_length := RandomRange(1,100);
  10610. vvals_b_length := RandomRange(1,100);
  10611. SetLength(vvals_a,vvals_a_length);
  10612. try
  10613. for i := 0 to Pred(vvals_a_length) do
  10614. vvals_a[i] := RandomFloat(Low(Word),High(Word));
  10615. SetLength(vvals_b,vvals_b_length);
  10616. for i := 0 to Pred(vvals_b_length) do
  10617. vvals_b[i] := RandomFloat(Low(Word),High(Word));
  10618. vls := x.getList('p_li');
  10619. for i := 0 to Pred(vvals_a_length) do
  10620. vls.append(vvals_a[i]);
  10621. vls := y.getList('p_b_li');
  10622. for i := 0 to Pred(vvals_b_length) do
  10623. vls.append(vvals_b[i]);
  10624. cs.beginLogging();
  10625. vls := x.getList('p_li');
  10626. vls.append(RandomFloat(Low(Word),High(Word)));
  10627. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10628. vls.append(RandomFloat(Low(Word),High(Word)));
  10629. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
  10630. vls.setFloat(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
  10631. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10632. vls.append(RandomFloat(Low(Word),High(Word)));
  10633. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10634. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10635. vls := y.getList('p_b_li');
  10636. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
  10637. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10638. vls.append(RandomFloat(Low(Word),High(Word)));
  10639. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10640. vls.append(RandomFloat(Low(Word),High(Word)));
  10641. vls.setFloat(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
  10642. vls.append(RandomFloat(Low(Word),High(Word)));
  10643. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10644. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10645. cs.undoChanges();
  10646. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10647. vls := x.getList('p_li');
  10648. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  10649. for i := 0 to Pred(vvals_a_length) do begin
  10650. CheckEquals(vvals_a[i], vls.getFloat(i), Format('x, Index = %d',[i]));
  10651. end;
  10652. vls := y.getList('p_b_li');
  10653. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  10654. for i := 0 to Pred(vvals_b_length) do begin
  10655. CheckEquals(vvals_b[i], vls.getFloat(i), Format('y, Index = %d',[i]));
  10656. end;
  10657. finally
  10658. SetLength(vvals_b,0);
  10659. SetLength(vvals_a,0);
  10660. end;
  10661. end;
  10662. {$ENDIF HAS_SDO_FLOAT}
  10663. {$IFDEF HAS_SDO_LONG}
  10664. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_long;
  10665. const
  10666. LOCAL_PROP = s_long_propList;
  10667. procedure check_empty_list(const AList : ISDOSettingList);
  10668. begin
  10669. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  10670. CheckEquals(0, AList.size());
  10671. end;
  10672. var
  10673. x : ISDODataObject;
  10674. cs : ISDOChangeSummary;
  10675. ls : ISDOSettingList;
  10676. vls : ISDODataObjectList;
  10677. vvals : array of TSDOLong;
  10678. vvals_length, i : PtrInt;
  10679. s : TValueSetting;
  10680. begin
  10681. Randomize();
  10682. x := FFactory.createNew(s_uri,s_type_object_A);
  10683. cs := x.getChangeSummary();
  10684. check_empty_list(cs.getOldValues(x));
  10685. vvals_length := RandomRange(1,100);
  10686. SetLength(vvals,vvals_length);
  10687. try
  10688. for i := 0 to Pred(vvals_length) do
  10689. vvals[i] := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
  10690. vls := x.getList(LOCAL_PROP);
  10691. for i := 0 to Pred(vvals_length) do
  10692. vls.append(vvals[i]);
  10693. check_empty_list(cs.getOldValues(x));
  10694. cs.beginLogging();
  10695. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10696. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10697. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10698. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10699. vls.setLong(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10700. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10701. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10702. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10703. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10704. ls := cs.getOldValues(x);
  10705. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  10706. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  10707. for i := 0 to Pred(vvals_length) do begin
  10708. s := ls.getItem(i);
  10709. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  10710. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  10711. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  10712. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  10713. CheckEquals(vvals[i], s.getLongValue(), Format('i = %d; getLongValue',[i]));
  10714. end;
  10715. finally
  10716. SetLength(vvals,0);
  10717. end;
  10718. end;
  10719. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_long();
  10720. const
  10721. LOCAL_PROP = s_long_propList;
  10722. var
  10723. x : ISDODataObject;
  10724. cs : ISDOChangeSummary;
  10725. vls : ISDODataObjectList;
  10726. vvals : array of TSDOLong;
  10727. vvals_length, i : PtrInt;
  10728. begin
  10729. Randomize();
  10730. x := FFactory.createNew(s_uri,s_type_object_A);
  10731. cs := x.getChangeSummary();
  10732. vvals_length := RandomRange(1,100);
  10733. SetLength(vvals,vvals_length);
  10734. try
  10735. for i := 0 to Pred(vvals_length) do
  10736. vvals[i] := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
  10737. vls := x.getList(LOCAL_PROP);
  10738. for i := 0 to Pred(vvals_length) do
  10739. vls.append(vvals[i]);
  10740. cs.beginLogging();
  10741. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10742. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10743. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10744. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10745. vls.setLong(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10746. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10747. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10748. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10749. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10750. cs.undoChanges();
  10751. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10752. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  10753. for i := 0 to Pred(vvals_length) do begin
  10754. CheckEquals(vvals[i], vls.getLong(i), Format('Index = %d',[i]));
  10755. end;
  10756. finally
  10757. SetLength(vvals,0);
  10758. end;
  10759. end;
  10760. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_long_deleted();
  10761. var
  10762. locFac : ISDODataFactory;
  10763. locA : ISDODataObject;
  10764. locCS : ISDOChangeSummary;
  10765. begin
  10766. locFac := TSDODataFactory.Create() as ISDODataFactory;
  10767. locFac.AddType(s_uri,'a',[]);
  10768. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  10769. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  10770. locA := locFac.createNew(s_uri,'a');
  10771. locA.getList('p_ab').append(TSDOLong(123963244));
  10772. locCS := locA.getChangeSummary();
  10773. locCS.beginLogging();
  10774. locA.getList('p_ab').delete(0);
  10775. locCS.getOldValues(locA);
  10776. locA := locFac.createNew(s_uri,'a');
  10777. locA.getList('p_ab').append(TSDOLong(23852215));
  10778. locA.getList('p_ab').append(TSDOLong(-52245));
  10779. locCS := locA.getChangeSummary();
  10780. locCS.beginLogging();
  10781. locA.getList('p_ab').delete(1);
  10782. locCS.getOldValues(locA);
  10783. locA := locFac.createNew(s_uri,'a');
  10784. locA.getList('p_ab').append(TSDOLong(1252222));
  10785. locA.getList('p_ab').append(TSDOLong(-11122123));
  10786. locA.getList('p_ab').append(TSDOLong(-24245));
  10787. locA.getList('p_ab').append(TSDOLong(522552));
  10788. locCS := locA.getChangeSummary();
  10789. locCS.beginLogging();
  10790. locA.getList('p_ab').delete(3);
  10791. locCS.getOldValues(locA);
  10792. end;
  10793. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_long();
  10794. const
  10795. PROP_TYPE = LongType;
  10796. var
  10797. f : ISDODataFactory;
  10798. x, y : ISDODataObject;
  10799. cs : ISDOChangeSummary;
  10800. vls : ISDODataObjectList;
  10801. vvals_a : array of TSDOLong;
  10802. vvals_a_length, i : PtrInt;
  10803. vvals_b : array of TSDOLong;
  10804. vvals_b_length : PtrInt;
  10805. begin
  10806. Randomize();
  10807. f := TSDODataFactory.Create();
  10808. f.AddType(s_uri, 'a', []);
  10809. f.AddType(s_uri, 'b', []);
  10810. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
  10811. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  10812. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  10813. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  10814. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  10815. x := f.createNew(s_uri,'a');
  10816. x.setLong('p_i', test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10817. y := x.createDataObject('p_ab');
  10818. cs := x.getChangeSummary();
  10819. vvals_a_length := RandomRange(1,100);
  10820. vvals_b_length := RandomRange(1,100);
  10821. SetLength(vvals_a,vvals_a_length);
  10822. try
  10823. for i := 0 to Pred(vvals_a_length) do
  10824. vvals_a[i] := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
  10825. SetLength(vvals_b,vvals_b_length);
  10826. for i := 0 to Pred(vvals_b_length) do
  10827. vvals_b[i] := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
  10828. vls := x.getList('p_li');
  10829. for i := 0 to Pred(vvals_a_length) do
  10830. vls.append(vvals_a[i]);
  10831. vls := y.getList('p_b_li');
  10832. for i := 0 to Pred(vvals_b_length) do
  10833. vls.append(vvals_b[i]);
  10834. cs.beginLogging();
  10835. vls := x.getList('p_li');
  10836. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10837. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10838. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10839. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10840. vls.setLong(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10841. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10842. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10843. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10844. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10845. vls := y.getList('p_b_li');
  10846. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10847. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10848. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10849. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10850. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10851. vls.setLong(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10852. vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
  10853. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10854. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10855. cs.undoChanges();
  10856. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10857. vls := x.getList('p_li');
  10858. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  10859. for i := 0 to Pred(vvals_a_length) do begin
  10860. CheckEquals(vvals_a[i], vls.getLong(i), Format('x, Index = %d',[i]));
  10861. end;
  10862. vls := y.getList('p_b_li');
  10863. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  10864. for i := 0 to Pred(vvals_b_length) do begin
  10865. CheckEquals(vvals_b[i], vls.getLong(i), Format('y, Index = %d',[i]));
  10866. end;
  10867. finally
  10868. SetLength(vvals_b,0);
  10869. SetLength(vvals_a,0);
  10870. end;
  10871. end;
  10872. {$ENDIF HAS_SDO_LONG}
  10873. {$IFDEF HAS_SDO_SHORT}
  10874. procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_short;
  10875. const
  10876. LOCAL_PROP = s_short_propList;
  10877. procedure check_empty_list(const AList : ISDOSettingList);
  10878. begin
  10879. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  10880. CheckEquals(0, AList.size());
  10881. end;
  10882. var
  10883. x : ISDODataObject;
  10884. cs : ISDOChangeSummary;
  10885. ls : ISDOSettingList;
  10886. vls : ISDODataObjectList;
  10887. vvals : array of TSDOShort;
  10888. vvals_length, i : PtrInt;
  10889. s : TValueSetting;
  10890. begin
  10891. Randomize();
  10892. x := FFactory.createNew(s_uri,s_type_object_A);
  10893. cs := x.getChangeSummary();
  10894. check_empty_list(cs.getOldValues(x));
  10895. vvals_length := RandomRange(1,100);
  10896. SetLength(vvals,vvals_length);
  10897. try
  10898. for i := 0 to Pred(vvals_length) do
  10899. vvals[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
  10900. vls := x.getList(LOCAL_PROP);
  10901. for i := 0 to Pred(vvals_length) do
  10902. vls.append(vvals[i]);
  10903. check_empty_list(cs.getOldValues(x));
  10904. cs.beginLogging();
  10905. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  10906. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10907. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  10908. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
  10909. vls.setShort(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
  10910. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10911. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  10912. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10913. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10914. ls := cs.getOldValues(x);
  10915. CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
  10916. CheckEquals(vvals_length, ls.size(), 'ls.size()');
  10917. for i := 0 to Pred(vvals_length) do begin
  10918. s := ls.getItem(i);
  10919. CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
  10920. CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
  10921. CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
  10922. CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
  10923. CheckEquals(vvals[i], s.getShortValue(), Format('i = %d; getShortValue',[i]));
  10924. end;
  10925. finally
  10926. SetLength(vvals,0);
  10927. end;
  10928. end;
  10929. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_short();
  10930. const
  10931. LOCAL_PROP = s_short_propList;
  10932. var
  10933. x : ISDODataObject;
  10934. cs : ISDOChangeSummary;
  10935. vls : ISDODataObjectList;
  10936. vvals : array of TSDOShort;
  10937. vvals_length, i : PtrInt;
  10938. begin
  10939. Randomize();
  10940. x := FFactory.createNew(s_uri,s_type_object_A);
  10941. cs := x.getChangeSummary();
  10942. vvals_length := RandomRange(1,100);
  10943. SetLength(vvals,vvals_length);
  10944. try
  10945. for i := 0 to Pred(vvals_length) do
  10946. vvals[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
  10947. vls := x.getList(LOCAL_PROP);
  10948. for i := 0 to Pred(vvals_length) do
  10949. vls.append(vvals[i]);
  10950. cs.beginLogging();
  10951. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  10952. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10953. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  10954. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
  10955. vls.setShort(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
  10956. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10957. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  10958. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10959. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  10960. cs.undoChanges();
  10961. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  10962. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  10963. for i := 0 to Pred(vvals_length) do begin
  10964. CheckEquals(vvals[i], vls.getShort(i), Format('Index = %d',[i]));
  10965. end;
  10966. finally
  10967. SetLength(vvals,0);
  10968. end;
  10969. end;
  10970. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_short_deleted();
  10971. var
  10972. locFac : ISDODataFactory;
  10973. locA : ISDODataObject;
  10974. locCS : ISDOChangeSummary;
  10975. begin
  10976. locFac := TSDODataFactory.Create() as ISDODataFactory;
  10977. locFac.AddType(s_uri,'a',[]);
  10978. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  10979. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  10980. locA := locFac.createNew(s_uri,'a');
  10981. locA.getList('p_ab').append(TSDOShort(1239));
  10982. locCS := locA.getChangeSummary();
  10983. locCS.beginLogging();
  10984. locA.getList('p_ab').delete(0);
  10985. locCS.getOldValues(locA);
  10986. locA := locFac.createNew(s_uri,'a');
  10987. locA.getList('p_ab').append(TSDOShort(2385));
  10988. locA.getList('p_ab').append(TSDOShort(-5225));
  10989. locCS := locA.getChangeSummary();
  10990. locCS.beginLogging();
  10991. locA.getList('p_ab').delete(1);
  10992. locCS.getOldValues(locA);
  10993. locA := locFac.createNew(s_uri,'a');
  10994. locA.getList('p_ab').append(TSDOShort(125));
  10995. locA.getList('p_ab').append(TSDOShort(-1113));
  10996. locA.getList('p_ab').append(TSDOShort(-245));
  10997. locA.getList('p_ab').append(TSDOShort(5222));
  10998. locCS := locA.getChangeSummary();
  10999. locCS.beginLogging();
  11000. locA.getList('p_ab').delete(3);
  11001. locCS.getOldValues(locA);
  11002. end;
  11003. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_short();
  11004. const
  11005. PROP_TYPE = ShortType;
  11006. var
  11007. f : ISDODataFactory;
  11008. x, y : ISDODataObject;
  11009. cs : ISDOChangeSummary;
  11010. vls : ISDODataObjectList;
  11011. vvals_a : array of TSDOShort;
  11012. vvals_a_length, i : PtrInt;
  11013. vvals_b : array of TSDOShort;
  11014. vvals_b_length : PtrInt;
  11015. begin
  11016. Randomize();
  11017. f := TSDODataFactory.Create();
  11018. f.AddType(s_uri, 'a', []);
  11019. f.AddType(s_uri, 'b', []);
  11020. f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
  11021. f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  11022. f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
  11023. f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
  11024. f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
  11025. x := f.createNew(s_uri,'a');
  11026. x.setShort('p_i', RandomRange(Low(TSDOShort),High(TSDOShort)));
  11027. y := x.createDataObject('p_ab');
  11028. cs := x.getChangeSummary();
  11029. vvals_a_length := RandomRange(1,100);
  11030. vvals_b_length := RandomRange(1,100);
  11031. SetLength(vvals_a,vvals_a_length);
  11032. try
  11033. for i := 0 to Pred(vvals_a_length) do
  11034. vvals_a[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
  11035. SetLength(vvals_b,vvals_b_length);
  11036. for i := 0 to Pred(vvals_b_length) do
  11037. vvals_b[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
  11038. vls := x.getList('p_li');
  11039. for i := 0 to Pred(vvals_a_length) do
  11040. vls.append(vvals_a[i]);
  11041. vls := y.getList('p_b_li');
  11042. for i := 0 to Pred(vvals_b_length) do
  11043. vls.append(vvals_b[i]);
  11044. cs.beginLogging();
  11045. vls := x.getList('p_li');
  11046. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  11047. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11048. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  11049. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
  11050. vls.setShort(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
  11051. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11052. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  11053. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11054. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11055. vls := y.getList('p_b_li');
  11056. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
  11057. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11058. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  11059. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11060. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  11061. vls.setShort(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
  11062. vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
  11063. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11064. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11065. cs.undoChanges();
  11066. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  11067. vls := x.getList('p_li');
  11068. CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
  11069. for i := 0 to Pred(vvals_a_length) do begin
  11070. CheckEquals(vvals_a[i], vls.getShort(i), Format('x, Index = %d',[i]));
  11071. end;
  11072. vls := y.getList('p_b_li');
  11073. CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
  11074. for i := 0 to Pred(vvals_b_length) do begin
  11075. CheckEquals(vvals_b[i], vls.getShort(i), Format('y, Index = %d',[i]));
  11076. end;
  11077. finally
  11078. SetLength(vvals_b,0);
  11079. SetLength(vvals_a,0);
  11080. end;
  11081. end;
  11082. {$ENDIF HAS_SDO_SHORT}
  11083. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_object;
  11084. const
  11085. LOCAL_PROP = s_Employee;
  11086. function create_factory () : ISDODataFactory;
  11087. var
  11088. locFac : ISDODataFactory;
  11089. begin
  11090. locFac := TSDODataFactory.Create() as ISDODataFactory;
  11091. locFac.AddType(s_uri,s_EmployeeType,[]);
  11092. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  11093. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  11094. locFac.AddType(s_uri,s_Department,[]);
  11095. locFac.addProperty(s_uri,s_Department,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  11096. locFac.addProperty(s_uri,s_Department,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  11097. locFac.addProperty(s_uri,s_Department,s_Employee,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  11098. locFac.addProperty(s_uri,s_Department,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  11099. Result := locFac;
  11100. end;
  11101. procedure check_empty_list(const AList : ISDOSettingList);
  11102. begin
  11103. CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
  11104. CheckEquals(0, AList.size());
  11105. end;
  11106. function create_employee(
  11107. const AFac : ISDODataFactory;
  11108. const AName, ASN : TSDOString
  11109. ) : ISDODataObject;
  11110. begin
  11111. Result := AFac.createNew(s_uri, s_EmployeeType);
  11112. Result.setString(s_name, AName);
  11113. Result.setString(s_sn, ASN);
  11114. end;
  11115. procedure check_employee_equal(const A, B : ISDODataObject; const AMsgPrefix : string);
  11116. begin
  11117. Check(
  11118. ( ( A = nil ) and ( B = nil ) ) or
  11119. ( ( A <> nil ) and ( B <> nil ) ),
  11120. AMsgPrefix
  11121. );
  11122. if ( A <> nil ) then begin
  11123. CheckEquals(A.getString(s_name), B.getString(s_name), Format('%s %s',[AMsgPrefix, s_name]));
  11124. CheckEquals(A.getString(s_sn), B.getString(s_sn), Format('%s %s',[AMsgPrefix, s_sn]));
  11125. end;
  11126. end;
  11127. var
  11128. locFac : ISDODataFactory;
  11129. x : ISDODataObject;
  11130. cs : ISDOChangeSummary;
  11131. vls : ISDODataObjectList;
  11132. vvals : array of ISDODataObject;
  11133. vvals_length, i : PtrInt;
  11134. begin
  11135. Randomize();
  11136. locFac := create_factory();
  11137. x := locFac.createNew(s_uri,s_Department);
  11138. cs := x.getChangeSummary();
  11139. check_empty_list(cs.getOldValues(x));
  11140. vvals_length := RandomRange(1,100);
  11141. SetLength(vvals,vvals_length);
  11142. try
  11143. for i := 0 to Pred(vvals_length) do
  11144. vvals[i] := create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100)));
  11145. vls := x.getList(LOCAL_PROP);
  11146. for i := 0 to Pred(vvals_length) do
  11147. vls.append(vvals[i]);
  11148. check_empty_list(cs.getOldValues(x));
  11149. cs.beginLogging();
  11150. vls.append(create_employee(locFac, 'sdo', '001'));
  11151. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11152. vls.append(create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  11153. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  11154. vls.setDataObject(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  11155. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11156. vls.append(create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  11157. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11158. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
  11159. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11160. cs.undoChanges();
  11161. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  11162. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  11163. for i := 0 to Pred(vvals_length) do begin
  11164. check_employee_equal(vvals[i],vls.getDataObject(i), Format('Object[%d]',[i]));
  11165. end;
  11166. finally
  11167. SetLength(vvals,0);
  11168. end;
  11169. end;
  11170. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_object_deleted;
  11171. var
  11172. locFac : ISDODataFactory;
  11173. locA : ISDODataObject;
  11174. locCS : ISDOChangeSummary;
  11175. begin
  11176. locFac := TSDODataFactory.Create() as ISDODataFactory;
  11177. locFac.AddType(s_uri,'a',[]);
  11178. locFac.AddType(s_uri,'b',[]);
  11179. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment,pfIsMany]);
  11180. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  11181. locA := locFac.createNew(s_uri,'a');
  11182. locA.getList('p_ab').append(locA.createDataObject('p_ab'));
  11183. locCS := locA.getChangeSummary();
  11184. locCS.beginLogging();
  11185. locA.getList('p_ab').delete(0);
  11186. locCS.getOldValues(locA);
  11187. locA := locFac.createNew(s_uri,'a');
  11188. locA.getList('p_ab').append(locA.createDataObject('p_ab'));
  11189. locA.getList('p_ab').append(locA.createDataObject('p_ab'));
  11190. locCS := locA.getChangeSummary();
  11191. locCS.beginLogging();
  11192. locA.getList('p_ab').delete(1);
  11193. locCS.getOldValues(locA);
  11194. locA := locFac.createNew(s_uri,'a');
  11195. locA.getList('p_ab').append(locA.createDataObject('p_ab'));
  11196. locA.getList('p_ab').append(locA.createDataObject('p_ab'));
  11197. locA.getList('p_ab').append(locA.createDataObject('p_ab'));
  11198. locA.getList('p_ab').append(locA.createDataObject('p_ab'));
  11199. locCS := locA.getChangeSummary();
  11200. locCS.beginLogging();
  11201. locA.getList('p_ab').delete(3);
  11202. locCS.getOldValues(locA);
  11203. end;
  11204. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_string();
  11205. const
  11206. LOCAL_PROP = s_string_propList;
  11207. var
  11208. x : ISDODataObject;
  11209. cs : ISDOChangeSummary;
  11210. vls : ISDODataObjectList;
  11211. vvals : array of TSDOString;
  11212. vvals_length, i : PtrInt;
  11213. begin
  11214. Randomize();
  11215. x := FFactory.createNew(s_uri,s_type_object_A);
  11216. cs := x.getChangeSummary();
  11217. vvals_length := RandomRange(1,100);
  11218. SetLength(vvals,vvals_length);
  11219. try
  11220. for i := 0 to Pred(vvals_length) do
  11221. vvals[i] := RandomString(RandomRange(0,100));
  11222. vls := x.getList(LOCAL_PROP);
  11223. for i := 0 to Pred(vvals_length) do
  11224. vls.append(vvals[i]);
  11225. cs.beginLogging();
  11226. vls.append(RandomString(RandomRange(0,100)));
  11227. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11228. vls.append(RandomString(RandomRange(0,100)));
  11229. vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
  11230. vls.setString(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
  11231. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11232. vls.append(RandomString(RandomRange(0,100)));
  11233. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11234. vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
  11235. cs.undoChanges();
  11236. CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
  11237. CheckEquals(vvals_length, vls.size(), 'vls.size()');
  11238. for i := 0 to Pred(vvals_length) do begin
  11239. CheckEquals(vvals[i], vls.getString(i), Format('Index = %d',[i]));
  11240. end;
  11241. finally
  11242. SetLength(vvals,0);
  11243. end;
  11244. end;
  11245. procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_string_deleted;
  11246. var
  11247. locFac : ISDODataFactory;
  11248. locA : ISDODataObject;
  11249. locCS : ISDOChangeSummary;
  11250. begin
  11251. locFac := TSDODataFactory.Create() as ISDODataFactory;
  11252. locFac.AddType(s_uri,'a',[]);
  11253. locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  11254. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  11255. locA := locFac.createNew(s_uri,'a');
  11256. locA.getList('p_ab').append('azerty');
  11257. locCS := locA.getChangeSummary();
  11258. locCS.beginLogging();
  11259. locA.getList('p_ab').delete(0);
  11260. locCS.getOldValues(locA);
  11261. locA := locFac.createNew(s_uri,'a');
  11262. locA.getList('p_ab').append('sdo');
  11263. locA.getList('p_ab').append('fpc');
  11264. locCS := locA.getChangeSummary();
  11265. locCS.beginLogging();
  11266. locA.getList('p_ab').delete(1);
  11267. locCS.getOldValues(locA);
  11268. locA := locFac.createNew(s_uri,'a');
  11269. locA.getList('p_ab').append('Delphi');
  11270. locA.getList('p_ab').append('Lazarus');
  11271. locA.getList('p_ab').append('WST');
  11272. locA.getList('p_ab').append('OI');
  11273. locCS := locA.getChangeSummary();
  11274. locCS.beginLogging();
  11275. locA.getList('p_ab').delete(3);
  11276. locCS.getOldValues(locA);
  11277. end;
  11278. initialization
  11279. RegisterTest('ChangeSummary',TValueSetting_Test.Suite);
  11280. RegisterTest('ChangeSummary',TSDOSettingList_Test.Suite);
  11281. //RegisterTest('ChangeSummary', TDicho_Test.Suite);
  11282. RegisterTest('ChangeSummary', TSDOChangedDataObjectList_Test.Suite);
  11283. RegisterTest('ChangeSummary', TChangeRecorder_Test.Suite);
  11284. RegisterTest('ChangeSummary', TSDOChangeSummary_Test.Suite);
  11285. RegisterTest('ChangeSummary', TSDODataObjectCS_Test.Suite);
  11286. RegisterTest('ChangeSummary', TSDOChangeSummaryMultiValueProps_Test.Suite);
  11287. end.