test_dataobject.pas 234 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626
  1. {$INCLUDE sdo_global.inc}
  2. unit test_dataobject;
  3. interface
  4. uses SysUtils
  5. {$IFDEF FPC}
  6. ,fpcunit, testutils, testregistry
  7. {$ENDIF}
  8. {$IFNDEF FPC}
  9. ,TestFrameWork
  10. {$ENDIF}
  11. , test_suite_utils, sdo, sdo_type, sdo_types, sdo_field_imp ;
  12. type
  13. TSDOBaseDataObject_Test = class(TWstBaseTest)
  14. private
  15. FFactory : ISDODataFactory;
  16. protected
  17. class function is_open_type() : Boolean;virtual;abstract;
  18. class function Create_Factory() : ISDODataFactory;
  19. class function GetTestSuitePath() : string;
  20. function Create_Object() : ISDODataObject;
  21. procedure check_xpath_value(
  22. const AExpected : TSDOInteger;
  23. const AObject : ISDODataObject;
  24. const AXPath : string
  25. );overload;
  26. procedure check_xpath_value(
  27. const AExpected : TSDOByte;
  28. const AObject : ISDODataObject;
  29. const AXPath : string
  30. );overload;
  31. procedure check_xpath_value(
  32. const AExpected : TSDOBoolean;
  33. const AObject : ISDODataObject;
  34. const AXPath : string
  35. );overload;
  36. procedure check_xpath_value(
  37. const AExpected : TSDODateTime;
  38. const AObject : ISDODataObject;
  39. const AXPath : string
  40. );overload;
  41. procedure check_xpath_value(
  42. const AExpected : TSDOString;
  43. const AObject : ISDODataObject;
  44. const AXPath : string
  45. );overload;
  46. {$IFDEF HAS_SDO_BYTES}
  47. procedure check_xpath_value(
  48. const AExpected : TSDOBytes;
  49. const AObject : ISDODataObject;
  50. const AXPath : string
  51. );overload;
  52. {$ENDIF HAS_SDO_BYTES}
  53. {$IFDEF HAS_SDO_CHAR}
  54. procedure check_xpath_value(
  55. const AExpected : TSDOChar;
  56. const AObject : ISDODataObject;
  57. const AXPath : string
  58. );overload;
  59. {$ENDIF HAS_SDO_CHAR}
  60. {$IFDEF HAS_SDO_CURRENCY}
  61. procedure check_xpath_value_currency(
  62. const AExpected : TSDOCurrency;
  63. const AObject : ISDODataObject;
  64. const AXPath : string
  65. );overload;
  66. {$ENDIF HAS_SDO_CURRENCY}
  67. {$IFDEF HAS_SDO_DOUBLE}
  68. procedure check_xpath_value(
  69. const AExpected : TSDODouble;
  70. const AObject : ISDODataObject;
  71. const AXPath : string
  72. );overload;
  73. {$ENDIF HAS_SDO_DOUBLE}
  74. {$IFDEF HAS_SDO_FLOAT}
  75. procedure check_xpath_value(
  76. const AExpected : TSDOFloat;
  77. const AObject : ISDODataObject;
  78. const AXPath : string
  79. );overload;
  80. {$ENDIF HAS_SDO_FLOAT}
  81. {$IFDEF HAS_SDO_LONG}
  82. procedure check_xpath_value(
  83. const AExpected : TSDOLong;
  84. const AObject : ISDODataObject;
  85. const AXPath : string
  86. );overload;
  87. {$ENDIF HAS_SDO_LONG}
  88. {$IFDEF HAS_SDO_SHORT}
  89. procedure check_xpath_value(
  90. const AExpected : TSDOShort;
  91. const AObject : ISDODataObject;
  92. const AXPath : string
  93. );overload;
  94. {$ENDIF HAS_SDO_SHORT}
  95. protected
  96. procedure SetUp(); override;
  97. procedure TearDown(); override;
  98. public
  99. procedure CheckEquals(expected, actual: TSDODateTime; msg: string = ''; const AStrict : Boolean = True); overload;
  100. published
  101. procedure IsInstanceOf();
  102. procedure object_destroy_order();
  103. procedure object_getChangeSummary();
  104. procedure object_getChangeSummary_multiprop();
  105. procedure object_setDataObject_cycle_containment();
  106. procedure object_setDataObject_ref();
  107. procedure object_setDataObject_ref_nil();
  108. procedure object_setDataObject_ref_nil_nested();
  109. procedure object_setDataObject_ref_unset();
  110. procedure object_setDataObject_ref_unset_nested();
  111. procedure object_setDataObject_ref_setnull();
  112. procedure object_setDataObject_ref_setnull_nested();
  113. procedure boolean_procs();
  114. procedure byte_procs();
  115. procedure integer_procs();
  116. procedure string_procs();
  117. procedure object_procs();
  118. procedure date_procs();
  119. {$IFDEF HAS_SDO_BYTES}
  120. procedure bytes_procs();
  121. {$ENDIF HAS_SDO_BYTES}
  122. {$IFDEF HAS_SDO_CHAR}
  123. procedure char_procs();
  124. {$ENDIF HAS_SDO_CHAR}
  125. {$IFDEF HAS_SDO_CURRENCY}
  126. procedure currency_procs();
  127. {$ENDIF HAS_SDO_CURRENCY}
  128. {$IFDEF HAS_SDO_DOUBLE}
  129. procedure double_procs();
  130. {$ENDIF HAS_SDO_DOUBLE}
  131. {$IFDEF HAS_SDO_FLOAT}
  132. procedure float_procs();
  133. {$ENDIF HAS_SDO_FLOAT}
  134. {$IFDEF HAS_SDO_LONG}
  135. procedure long_procs();
  136. {$ENDIF HAS_SDO_LONG}
  137. {$IFDEF HAS_SDO_SHORT}
  138. procedure short_procs();
  139. {$ENDIF HAS_SDO_SHORT}
  140. procedure byte_multivalue();
  141. procedure date_multivalue();
  142. procedure integer_multivalue();
  143. procedure object_ref_multivalue();
  144. procedure object_cont_multivalue();
  145. {$IFDEF HAS_SDO_BYTES}
  146. procedure bytes_multivalue();
  147. {$ENDIF HAS_SDO_BYTES}
  148. {$IFDEF HAS_SDO_CHAR}
  149. procedure char_multivalue();
  150. {$ENDIF HAS_SDO_CHAR}
  151. {$IFDEF HAS_SDO_CURRENCY}
  152. procedure currency_multivalue();
  153. {$ENDIF HAS_SDO_CURRENCY}
  154. {$IFDEF HAS_SDO_DOUBLE}
  155. procedure double_multivalue();
  156. {$ENDIF HAS_SDO_DOUBLE}
  157. {$IFDEF HAS_SDO_FLOAT}
  158. procedure float_multivalue();
  159. {$ENDIF HAS_SDO_FLOAT}
  160. {$IFDEF HAS_SDO_LONG}
  161. procedure long_multivalue();
  162. {$ENDIF HAS_SDO_LONG}
  163. {$IFDEF HAS_SDO_SHORT}
  164. procedure short_multivalue();
  165. {$ENDIF HAS_SDO_SHORT}
  166. procedure integer_unset_isset();
  167. procedure boolean_unset_isset();
  168. procedure byte_unset_isset();
  169. procedure string_unset_isset();
  170. procedure object_unset_isset();
  171. procedure date_unset_isset();
  172. {$IFDEF HAS_SDO_BYTES}
  173. procedure bytes_unset_isset();
  174. {$ENDIF HAS_SDO_BYTES}
  175. {$IFDEF HAS_SDO_CHAR}
  176. procedure char_unset_isset();
  177. {$ENDIF HAS_SDO_CHAR}
  178. {$IFDEF HAS_SDO_CURRENCY}
  179. procedure currency_unset_isset();
  180. {$ENDIF HAS_SDO_CURRENCY}
  181. {$IFDEF HAS_SDO_DOUBLE}
  182. procedure double_unset_isset();
  183. {$ENDIF HAS_SDO_DOUBLE}
  184. {$IFDEF HAS_SDO_FLOAT}
  185. procedure float_unset_isset();
  186. {$ENDIF HAS_SDO_FLOAT}
  187. {$IFDEF HAS_SDO_LONG}
  188. procedure long_unset_isset();
  189. {$ENDIF HAS_SDO_LONG}
  190. {$IFDEF HAS_SDO_SHORT}
  191. procedure short_unset_isset();
  192. {$ENDIF HAS_SDO_SHORT}
  193. procedure integer_setnull_isnull();
  194. procedure boolean_setnull_isnull();
  195. procedure byte_setnull_isnull();
  196. procedure string_setnull_isnull();
  197. procedure date_setnull_isnull();
  198. {$IFDEF HAS_SDO_BYTES}
  199. procedure bytes_setnull_isnull();
  200. {$ENDIF HAS_SDO_BYTES}
  201. {$IFDEF HAS_SDO_CHAR}
  202. procedure char_setnull_isnull();
  203. {$ENDIF HAS_SDO_CHAR}
  204. {$IFDEF HAS_SDO_CURRENCY}
  205. procedure currency_setnull_isnull();
  206. {$ENDIF HAS_SDO_CURRENCY}
  207. {$IFDEF HAS_SDO_DOUBLE}
  208. procedure double_setnull_isnull();
  209. {$ENDIF HAS_SDO_DOUBLE}
  210. {$IFDEF HAS_SDO_FLOAT}
  211. procedure float_setnull_isnull();
  212. {$ENDIF HAS_SDO_FLOAT}
  213. {$IFDEF HAS_SDO_LONG}
  214. procedure long_setnull_isnull();
  215. {$ENDIF HAS_SDO_LONG}
  216. {$IFDEF HAS_SDO_SHORT}
  217. procedure short_setnull_isnull();
  218. {$ENDIF HAS_SDO_SHORT}
  219. procedure property_default_value_integer();
  220. procedure property_default_value_bool();
  221. procedure property_default_value_byte();
  222. procedure property_default_value_string();
  223. procedure property_default_value_date();
  224. {$IFDEF HAS_SDO_BYTES}
  225. procedure property_default_value_bytes();
  226. {$ENDIF HAS_SDO_BYTES}
  227. {$IFDEF HAS_SDO_CHAR}
  228. procedure property_default_value_char();
  229. {$ENDIF HAS_SDO_CHAR}
  230. {$IFDEF HAS_SDO_CURRENCY}
  231. procedure property_default_value_currency();
  232. {$ENDIF HAS_SDO_CURRENCY}
  233. {$IFDEF HAS_SDO_DOUBLE}
  234. procedure property_default_value_double();
  235. {$ENDIF HAS_SDO_DOUBLE}
  236. {$IFDEF HAS_SDO_FLOAT}
  237. procedure property_default_value_float();
  238. {$ENDIF HAS_SDO_FLOAT}
  239. {$IFDEF HAS_SDO_LONG}
  240. procedure property_default_value_long();
  241. {$ENDIF HAS_SDO_LONG}
  242. {$IFDEF HAS_SDO_SHORT}
  243. procedure property_default_value_short();
  244. {$ENDIF HAS_SDO_SHORT}
  245. procedure property_default_value_unset_integer();
  246. procedure property_default_value_unset_bool();
  247. procedure property_default_value_unset_byte();
  248. procedure property_default_value_unset_string();
  249. procedure property_default_value_unset_date();
  250. {$IFDEF HAS_SDO_BYTES}
  251. procedure property_default_value_unset_bytes();
  252. {$ENDIF HAS_SDO_BYTES}
  253. {$IFDEF HAS_SDO_CHAR}
  254. procedure property_default_value_unset_char();
  255. {$ENDIF HAS_SDO_CHAR}
  256. {$IFDEF HAS_SDO_CURRENCY}
  257. procedure property_default_value_unset_currency();
  258. {$ENDIF HAS_SDO_CURRENCY}
  259. {$IFDEF HAS_SDO_DOUBLE}
  260. procedure property_default_value_unset_double();
  261. {$ENDIF HAS_SDO_DOUBLE}
  262. {$IFDEF HAS_SDO_FLOAT}
  263. procedure property_default_value_unset_float();
  264. {$ENDIF HAS_SDO_FLOAT}
  265. {$IFDEF HAS_SDO_LONG}
  266. procedure property_default_value_unset_long();
  267. {$ENDIF HAS_SDO_LONG}
  268. {$IFDEF HAS_SDO_SHORT}
  269. procedure property_default_value_unset_short();
  270. {$ENDIF HAS_SDO_SHORT}
  271. procedure get_bool_xpath();
  272. procedure get_byte_xpath();
  273. procedure get_date_xpath();
  274. procedure get_integer_xpath();
  275. procedure get_string_xpath();
  276. {$IFDEF HAS_SDO_BYTES}
  277. procedure get_bytes_xpath();
  278. {$ENDIF HAS_SDO_BYTES}
  279. {$IFDEF HAS_SDO_CHAR}
  280. procedure get_char_xpath();
  281. {$ENDIF HAS_SDO_CHAR}
  282. {$IFDEF HAS_SDO_CURRENCY}
  283. procedure get_currency_xpath();
  284. {$ENDIF HAS_SDO_CURRENCY}
  285. {$IFDEF HAS_SDO_DOUBLE}
  286. procedure get_double_xpath();
  287. {$ENDIF HAS_SDO_DOUBLE}
  288. {$IFDEF HAS_SDO_FLOAT}
  289. procedure get_float_xpath();
  290. {$ENDIF HAS_SDO_FLOAT}
  291. {$IFDEF HAS_SDO_LONG}
  292. procedure get_long_xpath();
  293. {$ENDIF HAS_SDO_LONG}
  294. {$IFDEF HAS_SDO_SHORT}
  295. procedure get_short_xpath();
  296. {$ENDIF HAS_SDO_SHORT}
  297. end;
  298. TSDODataObject_Test = class(TSDOBaseDataObject_Test)
  299. protected
  300. class function is_open_type() : Boolean;override;
  301. end;
  302. TSDOOpenedDataObject_Test = class(TSDOBaseDataObject_Test)
  303. protected
  304. class function is_open_type() : Boolean;override;
  305. procedure check_property(
  306. const APropList : ISDOPropertyList;
  307. const AName : string;
  308. const AType : ISDOType;
  309. const AFlags : TPropertyFlags
  310. );
  311. published
  312. procedure addProperty();
  313. procedure addProperty_error();
  314. procedure addProperty_byte();
  315. procedure addProperty_date();
  316. {$IFDEF HAS_SDO_BYTES}
  317. procedure addProperty_bytes();
  318. {$ENDIF HAS_SDO_BYTES}
  319. {$IFDEF HAS_SDO_CHAR}
  320. procedure addProperty_char();
  321. {$ENDIF HAS_SDO_CHAR}
  322. {$IFDEF HAS_SDO_CURRENCY}
  323. procedure addProperty_currency();
  324. {$ENDIF HAS_SDO_CURRENCY}
  325. {$IFDEF HAS_SDO_DOUBLE}
  326. procedure addProperty_double();
  327. {$ENDIF HAS_SDO_DOUBLE}
  328. {$IFDEF HAS_SDO_FLOAT}
  329. procedure addProperty_float();
  330. {$ENDIF HAS_SDO_FLOAT}
  331. {$IFDEF HAS_SDO_LONG}
  332. procedure addProperty_long();
  333. {$ENDIF HAS_SDO_LONG}
  334. {$IFDEF HAS_SDO_SHORT}
  335. procedure addProperty_short();
  336. {$ENDIF HAS_SDO_SHORT}
  337. procedure addProperty_multi_value();
  338. procedure addProperty_multi_value_byte();
  339. procedure addProperty_multi_value_date();
  340. {$IFDEF HAS_SDO_BYTES}
  341. procedure addProperty_multi_value_bytes();
  342. {$ENDIF HAS_SDO_BYTES}
  343. {$IFDEF HAS_SDO_CHAR}
  344. procedure addProperty_multi_value_char();
  345. {$ENDIF HAS_SDO_CHAR}
  346. {$IFDEF HAS_SDO_CURRENCY}
  347. procedure addProperty_multi_value_currency();
  348. {$ENDIF HAS_SDO_CURRENCY}
  349. {$IFDEF HAS_SDO_DOUBLE}
  350. procedure addProperty_multi_value_double();
  351. {$ENDIF HAS_SDO_DOUBLE}
  352. {$IFDEF HAS_SDO_FLOAT}
  353. procedure addProperty_multi_value_float();
  354. {$ENDIF HAS_SDO_FLOAT}
  355. {$IFDEF HAS_SDO_LONG}
  356. procedure addProperty_multi_value_long();
  357. {$ENDIF HAS_SDO_LONG}
  358. {$IFDEF HAS_SDO_SHORT}
  359. procedure addProperty_multi_value_short();
  360. {$ENDIF HAS_SDO_SHORT}
  361. procedure implicit_add_property();
  362. procedure implicit_add_property_byte();
  363. procedure implicit_add_property_date();
  364. {$IFDEF HAS_SDO_BYTES}
  365. procedure implicit_add_property_bytes();
  366. {$ENDIF HAS_SDO_BYTES}
  367. {$IFDEF HAS_SDO_CHAR}
  368. procedure implicit_add_property_char();
  369. {$ENDIF HAS_SDO_CHAR}
  370. {$IFDEF HAS_SDO_CURRENCY}
  371. procedure implicit_add_property_currency();
  372. {$ENDIF HAS_SDO_CURRENCY}
  373. {$IFDEF HAS_SDO_DOUBLE}
  374. procedure implicit_add_property_double();
  375. {$ENDIF HAS_SDO_DOUBLE}
  376. {$IFDEF HAS_SDO_FLOAT}
  377. procedure implicit_add_property_float();
  378. {$ENDIF HAS_SDO_FLOAT}
  379. {$IFDEF HAS_SDO_LONG}
  380. procedure implicit_add_property_long();
  381. {$ENDIF HAS_SDO_LONG}
  382. {$IFDEF HAS_SDO_SHORT}
  383. procedure implicit_add_property_short();
  384. {$ENDIF HAS_SDO_SHORT}
  385. end;
  386. TObserver_Test = class(TTestCase)
  387. published
  388. procedure ObserverInfo_create();
  389. procedure ObserverList_add_find();
  390. end;
  391. implementation
  392. uses
  393. sdo_datafactory, Math, sdo_linked_list, sdo_dataobject,
  394. sdo_consts, DateUtils, sdo_date_utils;
  395. const s_URI_1 = 'uri:1'; s_URI_3 = 'uri:3';
  396. s_TYPE_1 = 'type1'; s_TYPE_2 = 'type2'; s_TYPE_3 = 'type3'; s_TYPE_4 = 'type4';
  397. s_PROP_BOOL_1 = 'propboolean1';
  398. s_PROP_BOOL_2 = 'propboolean2';
  399. s_PROP_BOOL_3 = 'propboolean3';
  400. s_PROP_BYTE_1 = 'propbyte1';
  401. s_PROP_BYTE_2 = 'propbyte2';
  402. s_PROP_BYTE_3 = 'propbyte3';
  403. s_PROP_BYTES_1 = 'propbytes1';
  404. s_PROP_BYTES_2 = 'propbytes2';
  405. s_PROP_BYTES_3 = 'propbytes3';
  406. s_PROP_CHAR_1 = 'propchar1';
  407. s_PROP_CHAR_2 = 'propchar2';
  408. s_PROP_CHAR_3 = 'propchar3';
  409. s_PROP_CURRENCY_1 = 'propcurrency1';
  410. s_PROP_CURRENCY_2 = 'propcurrency2';
  411. s_PROP_CURRENCY_3 = 'propcurrency3';
  412. s_PROP_DATE_1 = 'propdate1';
  413. s_PROP_DATE_2 = 'propdate2';
  414. s_PROP_DATE_3 = 'propdate3';
  415. s_PROP_DOUBLE_1 = 'propdouble1';
  416. s_PROP_DOUBLE_2 = 'propdouble2';
  417. s_PROP_DOUBLE_3 = 'propdouble3';
  418. s_PROP_FLOAT_1 = 'propfloat1';
  419. s_PROP_FLOAT_2 = 'propfloat2';
  420. s_PROP_FLOAT_3 = 'propfloat3';
  421. s_PROP_INTEGER_1 = 'proplong1';
  422. s_PROP_INTEGER_2 = 'proplong2';
  423. s_PROP_INTEGER_3 = 'proplong3';
  424. s_PROP_LONG_1 = 'propinteger1';
  425. s_PROP_LONG_2 = 'propinteger2';
  426. s_PROP_LONG_3 = 'propinteger3';
  427. s_PROP_SHORT_1 = 'propshort1';
  428. s_PROP_SHORT_2 = 'propshort2';
  429. s_PROP_SHORT_3 = 'propshort3';
  430. s_PROP_STR_1 = 'propStr1';
  431. s_PROP_STR_2 = 'propStr2';
  432. s_PROP_STR_3 = 'propStr3';
  433. s_PROP_OBJ_CONT = 'propobj_cont';
  434. s_PROP_OBJ_REF = 'propobj_ref';
  435. s_PROP_OBJ_CONT_LIST = 'propobj_cont_list';
  436. s_PROP_OBJ_REF_LIST = 'propobj_ref_list';
  437. s_PROP_BOOL_A = 'propbooleanA';
  438. s_PROP_BOOL_B = 'propbooleanB';
  439. s_PROP_BYTE_A = 'propbyteA';
  440. s_PROP_BYTE_B = 'propbyteB';
  441. s_PROP_BYTES_A = 'propbytesA';
  442. s_PROP_BYTES_B = 'propbytesB';
  443. s_PROP_CHAR_A = 'propcharA';
  444. s_PROP_CHAR_B = 'propcharB';
  445. s_PROP_CURRENCY_A = 'propcurrencyA';
  446. s_PROP_CURRENCY_B = 'propcurrencyB';
  447. s_PROP_DATE_A = 'propdateA';
  448. s_PROP_DATE_B = 'propdateB';
  449. s_PROP_DOUBLE_A = 'propdoubleA';
  450. s_PROP_DOUBLE_B = 'propdoubleB';
  451. s_PROP_FLOAT_A = 'propfloatA';
  452. s_PROP_FLOAT_B = 'propfloatB';
  453. s_PROP_INTEGER_A = 'propintegerA';
  454. s_PROP_INTEGER_B = 'propintegerB';
  455. s_PROP_LONG_A = 'proplongA';
  456. s_PROP_LONG_B = 'proplongB';
  457. s_PROP_SHORT_A = 'propshortA';
  458. s_PROP_SHORT_B = 'propshortB';
  459. s_PROP_STR_A = 'propStrA';
  460. s_PROP_STR_B = 'propStrB';
  461. { TSDOBaseDataObject_Test }
  462. function TSDOBaseDataObject_Test.Create_Object() : ISDODataObject;
  463. begin
  464. Result := FFactory.createNew(s_URI_1,s_TYPE_1);
  465. end;
  466. class function TSDOBaseDataObject_Test.Create_Factory() : ISDODataFactory;
  467. var
  468. typ, typ2, typ3 : ISDOType;
  469. tfg : TTypeFlags;
  470. begin
  471. tfg := [];
  472. if is_open_type() then
  473. Include(tfg,tfIsOpen);
  474. Result := TSDODataFactory.Create();
  475. Result.AddType(s_URI_1,s_TYPE_1,tfg);
  476. Result.AddType(s_URI_1,s_TYPE_2,tfg);
  477. Result.AddType(s_URI_3,s_TYPE_3,tfg);
  478. Result.AddType(s_URI_1,s_TYPE_4,tfg);
  479. typ := Result.getType(s_URI_1,s_TYPE_1);
  480. Result.addProperty(typ,s_PROP_BOOL_1,sdo_namespace,'Boolean',[]);
  481. Result.addProperty(typ,s_PROP_BYTE_1,sdo_namespace,'Byte',[]);
  482. {$IFDEF HAS_SDO_BYTES}
  483. Result.addProperty(typ,s_PROP_BYTES_1,sdo_namespace,'Bytes',[]);
  484. {$ENDIF HAS_SDO_BYTES}
  485. {$IFDEF HAS_SDO_CHAR}
  486. Result.addProperty(typ,s_PROP_CHAR_1,sdo_namespace,'Character',[]);
  487. {$ENDIF HAS_SDO_CHAR}
  488. {$IFDEF HAS_SDO_CURRENCY}
  489. Result.addProperty(typ,s_PROP_CURRENCY_1,sdo_namespace,'Currency',[]);
  490. {$ENDIF HAS_SDO_CURRENCY}
  491. Result.addProperty(typ,s_PROP_DATE_1,sdo_namespace,'Date',[]);
  492. {$IFDEF HAS_SDO_DOUBLE}
  493. Result.addProperty(typ,s_PROP_DOUBLE_1,sdo_namespace,'Double',[]);
  494. {$ENDIF HAS_SDO_DOUBLE}
  495. {$IFDEF HAS_SDO_FLOAT}
  496. Result.addProperty(typ,s_PROP_FLOAT_1,sdo_namespace,'Float',[]);
  497. {$ENDIF HAS_SDO_FLOAT}
  498. Result.addProperty(typ,s_PROP_INTEGER_1,sdo_namespace,'Integer',[]);
  499. {$IFDEF HAS_SDO_LONG}
  500. Result.addProperty(typ,s_PROP_LONG_1,sdo_namespace,'Long',[]);
  501. {$ENDIF HAS_SDO_LONG}
  502. {$IFDEF HAS_SDO_SHORT}
  503. Result.addProperty(typ,s_PROP_SHORT_1,sdo_namespace,'Short',[]);
  504. {$ENDIF HAS_SDO_SHORT}
  505. Result.addProperty(typ,s_PROP_STR_1,sdo_namespace,'String',[]);
  506. Result.addProperty(typ,s_PROP_BOOL_2,sdo_namespace,'Boolean',[]);
  507. Result.addProperty(typ,s_PROP_BYTE_2,sdo_namespace,'Byte',[]);
  508. {$IFDEF HAS_SDO_BYTES}
  509. Result.addProperty(typ,s_PROP_BYTES_2,sdo_namespace,'Bytes',[]);
  510. {$ENDIF HAS_SDO_BYTES}
  511. {$IFDEF HAS_SDO_CHAR}
  512. Result.addProperty(typ,s_PROP_CHAR_2,sdo_namespace,'Character',[]);
  513. {$ENDIF HAS_SDO_CHAR}
  514. {$IFDEF HAS_SDO_CURRENCY}
  515. Result.addProperty(typ,s_PROP_CURRENCY_2,sdo_namespace,'Currency',[]);
  516. {$ENDIF HAS_SDO_CURRENCY}
  517. Result.addProperty(typ,s_PROP_DATE_2,sdo_namespace,'Date',[]);
  518. {$IFDEF HAS_SDO_DOUBLE}
  519. Result.addProperty(typ,s_PROP_DOUBLE_2,sdo_namespace,'Double',[]);
  520. {$ENDIF HAS_SDO_DOUBLE}
  521. {$IFDEF HAS_SDO_FLOAT}
  522. Result.addProperty(typ,s_PROP_FLOAT_2,sdo_namespace,'Float',[]);
  523. {$ENDIF HAS_SDO_FLOAT}
  524. Result.addProperty(typ,s_PROP_INTEGER_2,sdo_namespace,'Integer',[]);
  525. {$IFDEF HAS_SDO_LONG}
  526. Result.addProperty(typ,s_PROP_LONG_2,sdo_namespace,'Long',[]);
  527. {$ENDIF HAS_SDO_LONG}
  528. {$IFDEF HAS_SDO_SHORT}
  529. Result.addProperty(typ,s_PROP_SHORT_2,sdo_namespace,'Short',[]);
  530. {$ENDIF HAS_SDO_SHORT}
  531. Result.addProperty(typ,s_PROP_STR_2,sdo_namespace,'String',[]);
  532. Result.addProperty(typ,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  533. Result.addProperty(typ,s_PROP_OBJ_REF,s_URI_1,s_TYPE_2,[]);
  534. Result.addProperty(typ,s_PROP_OBJ_CONT_LIST,s_URI_1,s_TYPE_2,[pfIsMany,pfIsContainment]);
  535. Result.addProperty(typ,s_PROP_OBJ_REF_LIST,s_URI_1,s_TYPE_2,[pfIsMany]);
  536. Result.addProperty(typ,s_PROP_BOOL_3,sdo_namespace,'Boolean',[pfIsMany]);
  537. Result.addProperty(typ,s_PROP_BYTE_3,sdo_namespace,'Byte',[pfIsMany]);
  538. {$IFDEF HAS_SDO_BYTES}
  539. Result.addProperty(typ,s_PROP_BYTES_3,sdo_namespace,'Bytes',[pfIsMany]);
  540. {$ENDIF HAS_SDO_BYTES}
  541. {$IFDEF HAS_SDO_CHAR}
  542. Result.addProperty(typ,s_PROP_CHAR_3,sdo_namespace,'Character',[pfIsMany]);
  543. {$ENDIF HAS_SDO_CHAR}
  544. {$IFDEF HAS_SDO_CURRENCY}
  545. Result.addProperty(typ,s_PROP_CURRENCY_3,sdo_namespace,'Currency',[pfIsMany]);
  546. {$ENDIF HAS_SDO_CURRENCY}
  547. Result.addProperty(typ,s_PROP_DATE_3,sdo_namespace,'Date',[pfIsMany]);
  548. {$IFDEF HAS_SDO_DOUBLE}
  549. Result.addProperty(typ,s_PROP_DOUBLE_3,sdo_namespace,'Double',[pfIsMany]);
  550. {$ENDIF HAS_SDO_DOUBLE}
  551. {$IFDEF HAS_SDO_FLOAT}
  552. Result.addProperty(typ,s_PROP_FLOAT_3,sdo_namespace,'Float',[pfIsMany]);
  553. {$ENDIF HAS_SDO_FLOAT}
  554. Result.addProperty(typ,s_PROP_INTEGER_3,sdo_namespace,'Integer',[pfIsMany]);
  555. {$IFDEF HAS_SDO_LONG}
  556. Result.addProperty(typ,s_PROP_LONG_3,sdo_namespace,'Long',[pfIsMany]);
  557. {$ENDIF HAS_SDO_LONG}
  558. {$IFDEF HAS_SDO_SHORT}
  559. Result.addProperty(typ,s_PROP_SHORT_3,sdo_namespace,'Short',[pfIsMany]);
  560. {$ENDIF HAS_SDO_SHORT}
  561. Result.addProperty(typ,s_PROP_STR_3,sdo_namespace,'String',[pfIsMany]);
  562. typ2 := Result.getType(s_URI_1,s_TYPE_2);
  563. Result.addProperty(typ2,s_PROP_BOOL_A,sdo_namespace,'Boolean',[]);
  564. Result.addProperty(typ2,s_PROP_BYTE_A,sdo_namespace,'Byte',[]);
  565. {$IFDEF HAS_SDO_BYTES}
  566. Result.addProperty(typ2,s_PROP_BYTES_A,sdo_namespace,'Bytes',[]);
  567. {$ENDIF HAS_SDO_BYTES}
  568. {$IFDEF HAS_SDO_CHAR}
  569. Result.addProperty(typ2,s_PROP_CHAR_A,sdo_namespace,'Character',[]);
  570. {$ENDIF HAS_SDO_CHAR}
  571. {$IFDEF HAS_SDO_CURRENCY}
  572. Result.addProperty(typ2,s_PROP_CURRENCY_A,sdo_namespace,'Currency',[]);
  573. {$ENDIF HAS_SDO_CURRENCY}
  574. Result.addProperty(typ2,s_PROP_DATE_A,sdo_namespace,'Date',[]);
  575. {$IFDEF HAS_SDO_DOUBLE}
  576. Result.addProperty(typ2,s_PROP_DOUBLE_A,sdo_namespace,'Double',[]);
  577. {$ENDIF HAS_SDO_DOUBLE}
  578. {$IFDEF HAS_SDO_FLOAT}
  579. Result.addProperty(typ2,s_PROP_FLOAT_A,sdo_namespace,'Float',[]);
  580. {$ENDIF HAS_SDO_FLOAT}
  581. Result.addProperty(typ2,s_PROP_INTEGER_A,sdo_namespace,'Integer',[]);
  582. {$IFDEF HAS_SDO_LONG}
  583. Result.addProperty(typ2,s_PROP_LONG_A,sdo_namespace,'Long',[]);
  584. {$ENDIF HAS_SDO_LONG}
  585. {$IFDEF HAS_SDO_SHORT}
  586. Result.addProperty(typ2,s_PROP_SHORT_A,sdo_namespace,'Short',[]);
  587. {$ENDIF HAS_SDO_SHORT}
  588. Result.addProperty(typ2,s_PROP_STR_A,sdo_namespace,'String',[]);
  589. Result.addProperty(typ2,s_PROP_OBJ_CONT,s_URI_3,s_TYPE_3,[pfIsContainment]);
  590. typ3 := Result.getType(s_URI_3,s_TYPE_3);
  591. Result.addProperty(typ3,s_PROP_BOOL_2,sdo_namespace,'Boolean',[]);
  592. Result.addProperty(typ3,s_PROP_BYTE_2,sdo_namespace,'Byte',[]);
  593. {$IFDEF HAS_SDO_BYTES}
  594. Result.addProperty(typ3,s_PROP_BYTES_2,sdo_namespace,'Bytes',[]);
  595. {$ENDIF HAS_SDO_BYTES}
  596. {$IFDEF HAS_SDO_CHAR}
  597. Result.addProperty(typ3,s_PROP_CHAR_2,sdo_namespace,'Character',[]);
  598. {$ENDIF HAS_SDO_CHAR}
  599. {$IFDEF HAS_SDO_CURRENCY}
  600. Result.addProperty(typ3,s_PROP_CURRENCY_2,sdo_namespace,'Currency',[]);
  601. {$ENDIF HAS_SDO_CURRENCY}
  602. Result.addProperty(typ3,s_PROP_DATE_2,sdo_namespace,'Date',[]);
  603. {$IFDEF HAS_SDO_DOUBLE}
  604. Result.addProperty(typ3,s_PROP_DOUBLE_2,sdo_namespace,'Double',[]);
  605. {$ENDIF HAS_SDO_DOUBLE}
  606. {$IFDEF HAS_SDO_FLOAT}
  607. Result.addProperty(typ3,s_PROP_FLOAT_2,sdo_namespace,'Float',[]);
  608. {$ENDIF HAS_SDO_FLOAT}
  609. Result.addProperty(typ3,s_PROP_INTEGER_2,sdo_namespace,'Integer',[]);
  610. {$IFDEF HAS_SDO_LONG}
  611. Result.addProperty(typ3,s_PROP_LONG_2,sdo_namespace,'Long',[]);
  612. {$ENDIF HAS_SDO_LONG}
  613. {$IFDEF HAS_SDO_SHORT}
  614. Result.addProperty(typ3,s_PROP_SHORT_2,sdo_namespace,'Short',[]);
  615. {$ENDIF HAS_SDO_SHORT}
  616. Result.addProperty(typ3,s_PROP_STR_2,sdo_namespace,'String',[]);
  617. Result.addProperty(typ3,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_4,[pfIsContainment]);
  618. end;
  619. class function TSDOBaseDataObject_Test.GetTestSuitePath() : string;
  620. begin
  621. Result := 'object';
  622. end;
  623. procedure TSDOBaseDataObject_Test.SetUp();
  624. begin
  625. inherited;
  626. FFactory := Create_Factory();
  627. end;
  628. procedure TSDOBaseDataObject_Test.TearDown();
  629. begin
  630. FFactory := nil;
  631. inherited;
  632. end;
  633. procedure TSDOBaseDataObject_Test.boolean_procs();
  634. const VAL_1 = True; VAL_2 = False;
  635. var
  636. obj : ISDODataObject;
  637. ok : Boolean;
  638. begin
  639. obj := Create_Object();
  640. ok := False;
  641. try
  642. obj.setBoolean(obj.getProperty('qsdc'),VAL_1);
  643. except
  644. on e : ESDOPropertyNotFoundException do begin
  645. ok := True;
  646. end;
  647. end;
  648. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  649. ok := False;
  650. try
  651. obj.getBoolean(obj.getProperty('qsdc'));
  652. except
  653. on e : ESDOPropertyNotFoundException do begin
  654. ok := True;
  655. end;
  656. end;
  657. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  658. ok := False;
  659. try
  660. obj.setBoolean(obj.getProperty(s_PROP_BOOL_3),VAL_1);
  661. except
  662. on e : ESDOIllegalArgumentException do begin
  663. ok := True;
  664. end;
  665. end;
  666. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  667. obj.setBoolean(obj.getProperty(s_PROP_BOOL_1),VAL_1);
  668. CheckEquals(VAL_1,obj.getBoolean(obj.getProperty(s_PROP_BOOL_1)));
  669. CheckEquals(VAL_1,obj.getBoolean(s_PROP_BOOL_1));
  670. CheckEquals(VAL_1,obj.getBoolean(obj.getPropertyIndex(obj.getProperty(s_PROP_BOOL_1))));
  671. obj.setBoolean(obj.getProperty(s_PROP_BOOL_1),VAL_2);
  672. CheckEquals(VAL_2,obj.getBoolean(obj.getProperty(s_PROP_BOOL_1)));
  673. CheckEquals(VAL_2,obj.getBoolean(s_PROP_BOOL_1));
  674. CheckEquals(VAL_2,obj.getBoolean(obj.getPropertyIndex(obj.getProperty(s_PROP_BOOL_1))));
  675. obj.setBoolean(obj.getProperty(s_PROP_BOOL_2),VAL_1);
  676. CheckEquals(VAL_1,obj.getBoolean(obj.getProperty(s_PROP_BOOL_2)));
  677. CheckEquals(VAL_1,obj.getBoolean(s_PROP_BOOL_2));
  678. CheckEquals(VAL_1,obj.getBoolean(obj.getPropertyIndex(obj.getProperty(s_PROP_BOOL_2))));
  679. obj.setBoolean(obj.getProperty(s_PROP_BOOL_2),VAL_2);
  680. CheckEquals(VAL_2,obj.getBoolean(obj.getProperty(s_PROP_BOOL_2)));
  681. CheckEquals(VAL_2,obj.getBoolean(s_PROP_BOOL_2));
  682. CheckEquals(VAL_2,obj.getBoolean(obj.getPropertyIndex(obj.getProperty(s_PROP_BOOL_2))));
  683. end;
  684. procedure TSDOBaseDataObject_Test.integer_procs();
  685. const VAL_1 = 1210; VAL_2 = -97456; VAL_3 = 0;
  686. var
  687. obj : ISDODataObject;
  688. ok : Boolean;
  689. begin
  690. obj := Create_Object();
  691. ok := False;
  692. try
  693. obj.setInteger(obj.getProperty('qsdc'),VAL_1);
  694. except
  695. on e : ESDOPropertyNotFoundException do begin
  696. ok := True;
  697. end;
  698. end;
  699. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  700. ok := False;
  701. try
  702. obj.getInteger(obj.getProperty('qsdc'));
  703. except
  704. on e : ESDOPropertyNotFoundException do begin
  705. ok := True;
  706. end;
  707. end;
  708. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  709. ok := False;
  710. try
  711. obj.setInteger(obj.getProperty(s_PROP_INTEGER_3),VAL_1);
  712. except
  713. on e : ESDOIllegalArgumentException do begin
  714. ok := True;
  715. end;
  716. end;
  717. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  718. obj.setInteger(obj.getProperty(s_PROP_INTEGER_1),VAL_1);
  719. CheckEquals(VAL_1,obj.getInteger(obj.getProperty(s_PROP_INTEGER_1)));
  720. CheckEquals(VAL_1,obj.getInteger(s_PROP_INTEGER_1));
  721. CheckEquals(VAL_1,obj.getInteger(obj.getPropertyIndex(obj.getProperty(s_PROP_INTEGER_1))));
  722. obj.setInteger(obj.getProperty(s_PROP_INTEGER_1),VAL_2);
  723. CheckEquals(VAL_2,obj.getInteger(obj.getProperty(s_PROP_INTEGER_1)));
  724. CheckEquals(VAL_2,obj.getInteger(s_PROP_INTEGER_1));
  725. CheckEquals(VAL_2,obj.getInteger(obj.getPropertyIndex(obj.getProperty(s_PROP_INTEGER_1))));
  726. obj.setInteger(obj.getProperty(s_PROP_INTEGER_1),VAL_3);
  727. CheckEquals(VAL_3,obj.getInteger(obj.getProperty(s_PROP_INTEGER_1)));
  728. CheckEquals(VAL_3,obj.getInteger(s_PROP_INTEGER_1));
  729. CheckEquals(VAL_3,obj.getInteger(obj.getPropertyIndex(obj.getProperty(s_PROP_INTEGER_1))));
  730. obj.setInteger(obj.getProperty(s_PROP_INTEGER_2),VAL_1);
  731. CheckEquals(VAL_1,obj.getInteger(obj.getProperty(s_PROP_INTEGER_2)));
  732. CheckEquals(VAL_1,obj.getInteger(s_PROP_INTEGER_2));
  733. CheckEquals(VAL_1,obj.getInteger(obj.getPropertyIndex(obj.getProperty(s_PROP_INTEGER_2))));
  734. obj.setInteger(obj.getProperty(s_PROP_INTEGER_2),VAL_2);
  735. CheckEquals(VAL_2,obj.getInteger(obj.getProperty(s_PROP_INTEGER_2)));
  736. CheckEquals(VAL_2,obj.getInteger(s_PROP_INTEGER_2));
  737. CheckEquals(VAL_2,obj.getInteger(obj.getPropertyIndex(obj.getProperty(s_PROP_INTEGER_2))));
  738. obj.setInteger(obj.getProperty(s_PROP_INTEGER_2),VAL_3);
  739. CheckEquals(VAL_3,obj.getInteger(obj.getProperty(s_PROP_INTEGER_2)));
  740. CheckEquals(VAL_3,obj.getInteger(s_PROP_INTEGER_2));
  741. CheckEquals(VAL_3,obj.getInteger(obj.getPropertyIndex(obj.getProperty(s_PROP_INTEGER_2))));
  742. end;
  743. procedure TSDOBaseDataObject_Test.string_procs();
  744. const VAL_1 = 'klmhgf[]1210'; VAL_2 = ''; VAL_3 = 'wxyz';
  745. var
  746. obj : ISDODataObject;
  747. ok : Boolean;
  748. begin
  749. obj := Create_Object();
  750. ok := False;
  751. try
  752. obj.setString(obj.getProperty('qsdc'),VAL_1);
  753. except
  754. on e : ESDOPropertyNotFoundException do begin
  755. ok := True;
  756. end;
  757. end;
  758. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  759. ok := False;
  760. try
  761. obj.setString(obj.getProperty('qsdc'),VAL_1);
  762. except
  763. on e : ESDOPropertyNotFoundException do begin
  764. ok := True;
  765. end;
  766. end;
  767. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  768. obj.setString(obj.getProperty(s_PROP_STR_1),VAL_1);
  769. CheckEquals(VAL_1,obj.getString(obj.getProperty(s_PROP_STR_1)));
  770. CheckEquals(VAL_1,obj.getString(s_PROP_STR_1));
  771. CheckEquals(VAL_1,obj.getString(obj.getPropertyIndex(obj.getProperty(s_PROP_STR_1))));
  772. obj.setString(obj.getProperty(s_PROP_STR_1),VAL_2);
  773. CheckEquals(VAL_2,obj.getString(obj.getProperty(s_PROP_STR_1)));
  774. CheckEquals(VAL_2,obj.getString(s_PROP_STR_1));
  775. CheckEquals(VAL_2,obj.getString(obj.getPropertyIndex(obj.getProperty(s_PROP_STR_1))));
  776. obj.setString(obj.getProperty(s_PROP_STR_1),VAL_3);
  777. CheckEquals(VAL_3,obj.getString(obj.getProperty(s_PROP_STR_1)));
  778. CheckEquals(VAL_3,obj.getString(s_PROP_STR_1));
  779. CheckEquals(VAL_3,obj.getString(obj.getPropertyIndex(obj.getProperty(s_PROP_STR_1))));
  780. obj.setString(obj.getProperty(s_PROP_STR_2),VAL_1);
  781. CheckEquals(VAL_1,obj.getString(obj.getProperty(s_PROP_STR_2)));
  782. CheckEquals(VAL_1,obj.getString(s_PROP_STR_2));
  783. CheckEquals(VAL_1,obj.getString(obj.getPropertyIndex(obj.getProperty(s_PROP_STR_2))));
  784. obj.setString(obj.getProperty(s_PROP_STR_2),VAL_2);
  785. CheckEquals(VAL_2,obj.getString(obj.getProperty(s_PROP_STR_2)));
  786. CheckEquals(VAL_2,obj.getString(s_PROP_STR_2));
  787. CheckEquals(VAL_2,obj.getString(obj.getPropertyIndex(obj.getProperty(s_PROP_STR_2))));
  788. obj.setString(obj.getProperty(s_PROP_STR_2),VAL_3);
  789. CheckEquals(VAL_3,obj.getString(obj.getProperty(s_PROP_STR_2)));
  790. CheckEquals(VAL_3,obj.getString(s_PROP_STR_2));
  791. CheckEquals(VAL_3,obj.getString(obj.getPropertyIndex(obj.getProperty(s_PROP_STR_2))));
  792. end;
  793. procedure TSDOBaseDataObject_Test.object_procs();
  794. var
  795. ok : Boolean;
  796. obj1, obj2, obj2_2, obj3 : ISDODataObject;
  797. p1, p2 : ISDOProperty;
  798. begin
  799. obj1 := FFactory.createNew(s_URI_1,s_TYPE_1);
  800. Check(nil = obj1.getDataObject(s_PROP_OBJ_CONT));
  801. obj3 := FFactory.createNew(s_URI_3,s_TYPE_3);
  802. ok := False;
  803. try
  804. obj1.setDataObject(s_PROP_OBJ_CONT,obj3);
  805. except
  806. on e : ESDOIllegalArgumentException do begin
  807. ok := True;
  808. end;
  809. end;
  810. Check(ok,'incomptatible types.');
  811. ok := False;
  812. try
  813. obj1.getContainmentProperty();
  814. except
  815. on e : ESDOPropertyNotFoundException do begin
  816. ok := True;
  817. end;
  818. end;
  819. Check(ok,'Containment property.');
  820. Check(nil = obj1.getDataObject(s_PROP_OBJ_CONT));
  821. obj2 := obj1.createDataObject(s_PROP_OBJ_CONT);
  822. Check(nil <> obj2);
  823. Check(nil <> obj1.getDataObject(s_PROP_OBJ_CONT));
  824. Check(obj2 = obj1.getDataObject(s_PROP_OBJ_CONT));
  825. Check(obj1 = obj2.getContainer());
  826. p1 := obj1.getProperty(s_PROP_OBJ_CONT) as ISDOProperty;
  827. p2 := obj2.getContainmentProperty() as ISDOProperty;
  828. Check( p1 = p2 );
  829. ok := False;
  830. try
  831. obj1.setDataObject(s_PROP_OBJ_CONT,obj3);
  832. except
  833. on e : ESDOIllegalArgumentException do begin
  834. ok := True;
  835. end;
  836. end;
  837. Check(ok,'incomptatible types.');
  838. Check(obj2 = obj1.getDataObject(s_PROP_OBJ_CONT), 'A failed action must not modify data');
  839. Check(obj1 = obj2.getContainer(), 'A failed action must not modify data');
  840. p1 := obj1.getProperty(s_PROP_OBJ_CONT) as ISDOProperty;
  841. p2 := obj2.getContainmentProperty() as ISDOProperty;
  842. Check( p1 = p2 , 'A failed action must not modify data');
  843. obj1.setDataObject(s_PROP_OBJ_CONT,obj2);
  844. Check(nil = obj3.getDataObject(s_PROP_OBJ_CONT));
  845. Check(nil <> obj1.getDataObject(s_PROP_OBJ_CONT));
  846. Check(obj2 = obj1.getDataObject(s_PROP_OBJ_CONT));
  847. Check(obj1 = obj2.getContainer());
  848. p1 := obj1.getProperty(s_PROP_OBJ_CONT) as ISDOProperty;
  849. p2 := obj2.getContainmentProperty() as ISDOProperty;
  850. Check( p1 = p2 );
  851. obj2_2 := FFactory.createNew(s_URI_1,s_TYPE_2);
  852. obj1.setDataObject(s_PROP_OBJ_REF,obj2_2);
  853. Check(nil = obj2_2.getContainer());
  854. Check(nil <> obj1.getDataObject(s_PROP_OBJ_REF));
  855. Check(obj2_2 = obj1.getDataObject(s_PROP_OBJ_REF));
  856. ok := False;
  857. try
  858. obj2_2.getContainmentProperty();
  859. except
  860. on e : ESDOPropertyNotFoundException do begin
  861. ok := True;
  862. end;
  863. end;
  864. Check(ok,'Containment property.');
  865. end;
  866. procedure TSDOBaseDataObject_Test.integer_multivalue();
  867. const LOCAL_PROP = s_PROP_INTEGER_3; LOCAL_ARRAY_LEN = 100;
  868. var
  869. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDOInteger;
  870. procedure PrepareArray();
  871. var
  872. k : Integer;
  873. begin
  874. Randomize();
  875. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  876. val_list[k] := Random(200000000);
  877. if ( ( k mod 5 ) = 0 ) then
  878. val_list[k] := - val_list[k];
  879. end;
  880. end;
  881. var
  882. obj : ISDODataObject;
  883. ls, ls1 : ISDODataObjectList;
  884. i : Integer;
  885. crs : ILinkedListCursor;
  886. ok : Boolean;
  887. begin
  888. PrepareArray();
  889. obj := Create_Object();
  890. ok := False;
  891. try
  892. ls := obj.getList(s_PROP_BOOL_1);
  893. except
  894. on e : ESDOIllegalArgumentException do begin
  895. ok := True;
  896. end;
  897. end;
  898. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  899. ls := obj.getList(LOCAL_PROP);
  900. Check(ls <> nil);
  901. ls1 := obj.getList(LOCAL_PROP);
  902. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  903. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  904. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  905. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  906. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  907. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  908. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  909. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  910. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  911. CheckEquals(0,ls.size(),'Size');
  912. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  913. ls.append(val_list[i]);
  914. end;
  915. crs := ls.getCursor();
  916. Check(crs <> nil,'ls.getCursor()');
  917. crs.Reset();
  918. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  919. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  920. crs.MoveNext();
  921. CheckEquals(val_list[i],ls.getInteger(),'append() <> getInteger()');
  922. end;
  923. end;
  924. procedure TSDOBaseDataObject_Test.integer_unset_isset();
  925. const
  926. LOCAL_PROP = s_PROP_INTEGER_1;
  927. LOCAL_PROP_ARRAY = s_PROP_INTEGER_3;
  928. VAL_1 = 1210; VAL_2 = 76;
  929. var
  930. obj : ISDODataObject;
  931. ls : ISDODataObjectList;
  932. begin
  933. obj := Create_Object();
  934. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  935. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  936. obj.setInteger(LOCAL_PROP, VAL_1);
  937. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  938. obj.unset(LOCAL_PROP);
  939. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  940. CheckEquals(obj.getProperty(LOCAL_PROP).getIntegerDefault(),obj.getInteger(LOCAL_PROP),'"unSet" should restore the default value');
  941. obj.setInteger(LOCAL_PROP, VAL_2);
  942. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  943. obj.unset(LOCAL_PROP);
  944. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  945. ls := obj.getList(LOCAL_PROP_ARRAY);
  946. Check(ls <> nil);
  947. CheckEquals(0,ls.size());
  948. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  949. ls.append(VAL_1);
  950. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  951. obj.unset(LOCAL_PROP_ARRAY);
  952. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  953. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  954. CheckEquals(0,ls.size());
  955. ls.append(VAL_1);
  956. ls.append(VAL_2);
  957. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  958. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  959. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  960. CheckEquals(2,ls.size());
  961. obj.unset(LOCAL_PROP_ARRAY);
  962. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  963. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  964. CheckEquals(0,ls.size());
  965. end;
  966. procedure TSDOBaseDataObject_Test.boolean_unset_isset();
  967. const
  968. LOCAL_PROP = s_PROP_BOOL_1;
  969. LOCAL_PROP_ARRAY = s_PROP_BOOL_3;
  970. VAL_1 = True; VAL_2 = False;
  971. var
  972. obj : ISDODataObject;
  973. ls : ISDODataObjectList;
  974. begin
  975. obj := Create_Object();
  976. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  977. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  978. obj.setBoolean(LOCAL_PROP, VAL_1);
  979. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  980. obj.unset(LOCAL_PROP);
  981. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  982. obj.setBoolean(LOCAL_PROP, VAL_2);
  983. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  984. obj.unset(LOCAL_PROP);
  985. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  986. ls := obj.getList(LOCAL_PROP_ARRAY);
  987. Check(ls <> nil);
  988. CheckEquals(0,ls.size());
  989. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  990. ls.append(VAL_1);
  991. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  992. obj.unset(LOCAL_PROP_ARRAY);
  993. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  994. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  995. CheckEquals(0,ls.size());
  996. ls.append(VAL_1);
  997. ls.append(VAL_2);
  998. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  999. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1000. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1001. CheckEquals(2,ls.size());
  1002. obj.unset(LOCAL_PROP_ARRAY);
  1003. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1004. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1005. CheckEquals(0,ls.size());
  1006. end;
  1007. procedure TSDOBaseDataObject_Test.string_unset_isset();
  1008. const
  1009. LOCAL_PROP = s_PROP_STR_1;
  1010. LOCAL_PROP_ARRAY = s_PROP_STR_3;
  1011. VAL_1 = 'wwssxx'; VAL_2 = '';
  1012. var
  1013. obj : ISDODataObject;
  1014. ls : ISDODataObjectList;
  1015. begin
  1016. obj := Create_Object();
  1017. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1018. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1019. obj.setString(LOCAL_PROP, VAL_1);
  1020. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1021. obj.unset(LOCAL_PROP);
  1022. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1023. obj.setString(LOCAL_PROP, VAL_2);
  1024. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1025. obj.unset(LOCAL_PROP);
  1026. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1027. ls := obj.getList(LOCAL_PROP_ARRAY);
  1028. Check(ls <> nil);
  1029. CheckEquals(0,ls.size());
  1030. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1031. ls.append(VAL_1);
  1032. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1033. obj.unset(LOCAL_PROP_ARRAY);
  1034. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1035. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1036. CheckEquals(0,ls.size());
  1037. ls.append(VAL_1);
  1038. ls.append(VAL_2);
  1039. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1040. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1041. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1042. CheckEquals(2,ls.size());
  1043. obj.unset(LOCAL_PROP_ARRAY);
  1044. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1045. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1046. CheckEquals(0,ls.size());
  1047. end;
  1048. procedure TSDOBaseDataObject_Test.object_unset_isset();
  1049. const
  1050. LOCAL_PROP = s_PROP_OBJ_CONT;
  1051. LOCAL_PROP_ARRAY = s_PROP_OBJ_CONT_LIST;
  1052. var
  1053. obj, VAL_A, VAL_B : ISDODataObject;
  1054. ls : ISDODataObjectList;
  1055. begin
  1056. obj := Create_Object();
  1057. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP + ' 1');
  1058. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1059. VAL_A := obj.createDataObject(LOCAL_PROP);
  1060. VAL_B := obj.createDataObject(LOCAL_PROP);
  1061. obj.setDataObject(LOCAL_PROP, VAL_A);
  1062. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP + ' 4');
  1063. obj.unset(LOCAL_PROP);
  1064. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP + ' 5');
  1065. obj.setDataObject(LOCAL_PROP, VAL_B);
  1066. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP + ' 6');
  1067. obj.unset(LOCAL_PROP);
  1068. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP + ' 7');
  1069. ls := obj.getList(LOCAL_PROP_ARRAY);
  1070. Check(ls <> nil);
  1071. CheckEquals(0,ls.size());
  1072. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1073. ls.append(obj.createDataObject(LOCAL_PROP_ARRAY));
  1074. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1075. obj.unset(LOCAL_PROP_ARRAY);
  1076. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1077. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1078. CheckEquals(0,ls.size());
  1079. ls.append(obj.createDataObject(LOCAL_PROP_ARRAY));
  1080. ls.append(obj.createDataObject(LOCAL_PROP_ARRAY));
  1081. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1082. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1083. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1084. CheckEquals(2,ls.size());
  1085. obj.unset(LOCAL_PROP_ARRAY);
  1086. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1087. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1088. CheckEquals(0,ls.size());
  1089. end;
  1090. procedure TSDOBaseDataObject_Test.integer_setnull_isnull();
  1091. const
  1092. LOCAL_PROP = s_PROP_INTEGER_1;
  1093. LOCAL_PROP_ARRAY = s_PROP_INTEGER_3;
  1094. VAL_1 = 1210;
  1095. var
  1096. obj : ISDODataObject;
  1097. begin
  1098. obj := Create_Object();
  1099. // these _does_ depend on the property's default
  1100. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1101. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1102. obj.setInteger(LOCAL_PROP, VAL_1);
  1103. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1104. obj.setNull(LOCAL_PROP);
  1105. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1106. CheckEquals(0,obj.getInteger(LOCAL_PROP),LOCAL_PROP);
  1107. end;
  1108. procedure TSDOBaseDataObject_Test.boolean_setnull_isnull();
  1109. const
  1110. LOCAL_PROP = s_PROP_BOOL_1;
  1111. LOCAL_PROP_ARRAY = s_PROP_BOOL_3;
  1112. VAL_1 = True; VAL_2 = False;
  1113. var
  1114. obj : ISDODataObject;
  1115. begin
  1116. obj := Create_Object();
  1117. // these _does_ depend on the property's default
  1118. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1119. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1120. obj.setBoolean(LOCAL_PROP, VAL_1);
  1121. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1122. obj.setNull(LOCAL_PROP);
  1123. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1124. CheckEquals(False,obj.getBoolean(LOCAL_PROP),LOCAL_PROP);
  1125. obj.setBoolean(LOCAL_PROP, VAL_2);
  1126. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1127. obj.setNull(LOCAL_PROP);
  1128. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1129. CheckEquals(False,obj.getBoolean(LOCAL_PROP),LOCAL_PROP);
  1130. end;
  1131. procedure TSDOBaseDataObject_Test.string_setnull_isnull();
  1132. const
  1133. LOCAL_PROP = s_PROP_STR_1;
  1134. LOCAL_PROP_ARRAY = s_PROP_STR_3;
  1135. VAL_1 = 'wwssxx'; VAL_2 = '';
  1136. var
  1137. obj : ISDODataObject;
  1138. begin
  1139. obj := Create_Object();
  1140. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1141. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1142. obj.setString(LOCAL_PROP, VAL_1);
  1143. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1144. obj.setNull(LOCAL_PROP);
  1145. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1146. obj.setString(LOCAL_PROP, VAL_2);
  1147. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1148. obj.setNull(LOCAL_PROP);
  1149. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1150. end;
  1151. procedure TSDOBaseDataObject_Test.object_setDataObject_ref_nil();
  1152. var
  1153. locA, locA1, locB : ISDODataObject;
  1154. begin
  1155. locA := FFactory.createNew(s_URI_1,s_TYPE_1);
  1156. locB := locA.createDataObject(s_PROP_OBJ_CONT);
  1157. CheckNotEquals(PtrUInt(nil), PtrUInt(locB));
  1158. CheckEquals(PtrUInt(locB), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1159. locA1 := FFactory.createNew(s_URI_1,s_TYPE_1);
  1160. locA1.setDataObject(s_PROP_OBJ_REF,locB);
  1161. CheckEquals(PtrUInt(locB), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1162. CheckEquals(PtrUInt(locB), PtrUInt(locA1.getDataObject(s_PROP_OBJ_REF)));
  1163. locA.setDataObject(s_PROP_OBJ_CONT,nil);
  1164. CheckEquals(PtrUInt(nil), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1165. CheckEquals(PtrUInt(nil), PtrUInt(locA1.getDataObject(s_PROP_OBJ_REF)), 'This reference should be NIL because the object has been deleted by his container.');
  1166. end;
  1167. procedure TSDOBaseDataObject_Test.object_setDataObject_ref_unset();
  1168. var
  1169. locA, locA1, locB : ISDODataObject;
  1170. begin
  1171. locA := FFactory.createNew(s_URI_1,s_TYPE_1);
  1172. locB := locA.createDataObject(s_PROP_OBJ_CONT);
  1173. CheckNotEquals(PtrUInt(nil), PtrUInt(locB));
  1174. CheckEquals(PtrUInt(locB), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1175. locA1 := FFactory.createNew(s_URI_1,s_TYPE_1);
  1176. locA1.setDataObject(s_PROP_OBJ_REF,locB);
  1177. CheckEquals(PtrUInt(locB), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1178. CheckEquals(PtrUInt(locB), PtrUInt(locA1.getDataObject(s_PROP_OBJ_REF)));
  1179. locA.unset(s_PROP_OBJ_CONT);
  1180. CheckEquals(PtrUInt(nil), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1181. CheckEquals(PtrUInt(nil), PtrUInt(locA1.getDataObject(s_PROP_OBJ_REF)), 'This reference should be NIL because the object has been deleted by his container.');
  1182. end;
  1183. procedure TSDOBaseDataObject_Test.object_setDataObject_ref_setnull();
  1184. var
  1185. locA, locA1, locB : ISDODataObject;
  1186. begin
  1187. locA := FFactory.createNew(s_URI_1,s_TYPE_1);
  1188. locB := locA.createDataObject(s_PROP_OBJ_CONT);
  1189. CheckNotEquals(PtrUInt(nil), PtrUInt(locB));
  1190. CheckEquals(PtrUInt(locB), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1191. locA1 := FFactory.createNew(s_URI_1,s_TYPE_1);
  1192. locA1.setDataObject(s_PROP_OBJ_REF,locB);
  1193. CheckEquals(PtrUInt(locB), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1194. CheckEquals(PtrUInt(locB), PtrUInt(locA1.getDataObject(s_PROP_OBJ_REF)));
  1195. locA.setNull(s_PROP_OBJ_CONT);
  1196. CheckEquals(PtrUInt(nil), PtrUInt(locA.getDataObject(s_PROP_OBJ_CONT)));
  1197. CheckEquals(PtrUInt(nil), PtrUInt(locA1.getDataObject(s_PROP_OBJ_REF)), 'This reference should be NIL because the object has been deleted by his container.');
  1198. end;
  1199. procedure TSDOBaseDataObject_Test.object_setDataObject_ref_nil_nested();
  1200. var
  1201. locFac : ISDODataFactory;
  1202. locA, locB, locC, locD : ISDODataObject;
  1203. procedure InitAndCreateObject();
  1204. begin
  1205. locA := nil;
  1206. locB := nil;
  1207. locC := nil;
  1208. locD := nil;
  1209. locA := locFac.createNew(s_URI_1,'A');
  1210. locB := locA.createDataObject('Pab');
  1211. locC := locB.createDataObject('Pbc');
  1212. locD := locC.createDataObject('Pcd');
  1213. locA.setDataObject('Pad_ref',locD);
  1214. end;
  1215. var
  1216. tfg : TTypeFlags;
  1217. begin
  1218. tfg := [];
  1219. if is_open_type() then
  1220. Include(tfg,tfIsOpen);
  1221. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1222. locFac.AddType(s_URI_1,'A',tfg);
  1223. locFac.AddType(s_URI_1,'B',tfg);
  1224. locFac.AddType(s_URI_1,'C',tfg);
  1225. locFac.AddType(s_URI_1,'D',tfg);
  1226. locFac.addProperty(s_URI_1,'A','Pab',s_URI_1,'B',[pfIsContainment]); // <<-- Containment
  1227. locFac.addProperty(s_URI_1,'B','Pbc',s_URI_1,'C',[pfIsContainment]); // <<-- Containment
  1228. locFac.addProperty(s_URI_1,'C','Pcd',s_URI_1,'D',[pfIsContainment]); // <<-- Containment
  1229. locFac.addProperty(s_URI_1,'A','Pad_ref',s_URI_1,'D',[]); // <<-- Reference
  1230. InitAndCreateObject();
  1231. locC.setDataObject('Pcd',nil);
  1232. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1233. InitAndCreateObject();
  1234. locB.setDataObject('Pbc',nil);
  1235. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1236. InitAndCreateObject();
  1237. locA.setDataObject('Pab',nil);
  1238. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1239. end;
  1240. procedure TSDOBaseDataObject_Test.object_setDataObject_ref_setnull_nested;
  1241. var
  1242. locFac : ISDODataFactory;
  1243. locA, locB, locC, locD : ISDODataObject;
  1244. procedure InitAndCreateObject();
  1245. begin
  1246. locA := nil;
  1247. locB := nil;
  1248. locC := nil;
  1249. locD := nil;
  1250. locA := locFac.createNew(s_URI_1,'A');
  1251. locB := locA.createDataObject('Pab');
  1252. locC := locB.createDataObject('Pbc');
  1253. locD := locC.createDataObject('Pcd');
  1254. locA.setDataObject('Pad_ref',locD);
  1255. end;
  1256. var
  1257. tfg : TTypeFlags;
  1258. begin
  1259. tfg := [];
  1260. if is_open_type() then
  1261. Include(tfg,tfIsOpen);
  1262. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1263. locFac.AddType(s_URI_1,'A',tfg);
  1264. locFac.AddType(s_URI_1,'B',tfg);
  1265. locFac.AddType(s_URI_1,'C',tfg);
  1266. locFac.AddType(s_URI_1,'D',tfg);
  1267. locFac.addProperty(s_URI_1,'A','Pab',s_URI_1,'B',[pfIsContainment]); // <<-- Containment
  1268. locFac.addProperty(s_URI_1,'B','Pbc',s_URI_1,'C',[pfIsContainment]); // <<-- Containment
  1269. locFac.addProperty(s_URI_1,'C','Pcd',s_URI_1,'D',[pfIsContainment]); // <<-- Containment
  1270. locFac.addProperty(s_URI_1,'A','Pad_ref',s_URI_1,'D',[]); // <<-- Reference
  1271. InitAndCreateObject();
  1272. locC.setNull('Pcd');
  1273. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1274. InitAndCreateObject();
  1275. locB.setNull('Pbc');
  1276. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1277. InitAndCreateObject();
  1278. locA.setNull('Pab');
  1279. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1280. end;
  1281. procedure TSDOBaseDataObject_Test.object_setDataObject_ref_unset_nested;
  1282. var
  1283. locFac : ISDODataFactory;
  1284. locA, locB, locC, locD : ISDODataObject;
  1285. procedure InitAndCreateObject();
  1286. begin
  1287. locA := nil;
  1288. locB := nil;
  1289. locC := nil;
  1290. locD := nil;
  1291. locA := locFac.createNew(s_URI_1,'A');
  1292. locB := locA.createDataObject('Pab');
  1293. locC := locB.createDataObject('Pbc');
  1294. locD := locC.createDataObject('Pcd');
  1295. locA.setDataObject('Pad_ref',locD);
  1296. end;
  1297. var
  1298. tfg : TTypeFlags;
  1299. begin
  1300. tfg := [];
  1301. if is_open_type() then
  1302. Include(tfg,tfIsOpen);
  1303. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1304. locFac.AddType(s_URI_1,'A',tfg);
  1305. locFac.AddType(s_URI_1,'B',tfg);
  1306. locFac.AddType(s_URI_1,'C',tfg);
  1307. locFac.AddType(s_URI_1,'D',tfg);
  1308. locFac.addProperty(s_URI_1,'A','Pab',s_URI_1,'B',[pfIsContainment]); // <<-- Containment
  1309. locFac.addProperty(s_URI_1,'B','Pbc',s_URI_1,'C',[pfIsContainment]); // <<-- Containment
  1310. locFac.addProperty(s_URI_1,'C','Pcd',s_URI_1,'D',[pfIsContainment]); // <<-- Containment
  1311. locFac.addProperty(s_URI_1,'A','Pad_ref',s_URI_1,'D',[]); // <<-- Reference
  1312. InitAndCreateObject();
  1313. locC.unset('Pcd');
  1314. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1315. InitAndCreateObject();
  1316. locB.unset('Pbc');
  1317. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1318. InitAndCreateObject();
  1319. locA.unset('Pab');
  1320. CheckEquals(PtrUInt(0), PtrUInt(locA.getDataObject('Pad_ref')));
  1321. end;
  1322. procedure TSDOBaseDataObject_Test.object_setDataObject_cycle_containment();
  1323. var
  1324. locFac : ISDODataFactory;
  1325. locA, locB, locC : ISDODataObject;
  1326. ok : Boolean;
  1327. tfg : TTypeFlags;
  1328. begin
  1329. tfg := [];
  1330. if is_open_type() then
  1331. Include(tfg,tfIsOpen);
  1332. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1333. locFac.AddType(s_URI_1,'X',tfg);
  1334. locFac.AddType(s_URI_1,'A',tfg);
  1335. locFac.setBaseType(s_URI_1,'A',s_URI_1,'X');
  1336. locFac.AddType(s_URI_1,'B',tfg);
  1337. locFac.AddType(s_URI_1,'C',tfg);
  1338. locFac.addProperty(s_URI_1,'A','p_ab',s_URI_1,'B',[pfIsContainment]);
  1339. locFac.addProperty(s_URI_1,'B','p_bc',s_URI_1,'C',[pfIsContainment]);
  1340. locFac.addProperty(s_URI_1,'C','p_ca',sdo_namespace,SDOTypeDefaultTypeNames[ObjectType],[pfIsContainment]);
  1341. locA := locFac.createNew(s_URI_1,'A');
  1342. locB := locA.createDataObject('p_ab');
  1343. locC := locB.createDataObject('p_bc');
  1344. ok := False;
  1345. try
  1346. locC.setDataObject('p_ca',locA);
  1347. except
  1348. on e : ESDOCycleContainmentException do
  1349. ok := True
  1350. end;
  1351. Check(ok,'Cycle Containment.');
  1352. end;
  1353. procedure TSDOBaseDataObject_Test.IsInstanceOf();
  1354. var
  1355. locFac : ISDODataFactory;
  1356. locO : ISDODataObjectEx;
  1357. tfg : TTypeFlags;
  1358. begin
  1359. tfg := [];
  1360. if is_open_type() then
  1361. Include(tfg,tfIsOpen);
  1362. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1363. locFac.AddType(s_URI_1,'A',tfg);
  1364. locFac.AddType(s_URI_1,'A_B_1',tfg);
  1365. locFac.setBaseType(s_URI_1,'A_B_1',s_URI_1,'A');
  1366. locFac.AddType(s_URI_1,'A_B_2',tfg);
  1367. locFac.setBaseType(s_URI_1,'A_B_2',s_URI_1,'A');
  1368. locFac.AddType(s_URI_1,'A_B_2_C',tfg);
  1369. locFac.setBaseType(s_URI_1,'A_B_2_C',s_URI_1,'A_B_2');
  1370. locFac.AddType(s_URI_1,'A_B_2_C_D',tfg);
  1371. locFac.setBaseType(s_URI_1,'A_B_2_C_D',s_URI_1,'A_B_2_C');
  1372. locFac.AddType(s_URI_1,'B',tfg);
  1373. locFac.AddType(s_URI_1,'C',tfg);
  1374. locO := locFac.createNew(s_URI_1,'A') as ISDODataObjectEx;
  1375. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A')));
  1376. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'B')));
  1377. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_1')));
  1378. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2')));
  1379. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C')));
  1380. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C_D')));
  1381. locO := locFac.createNew(s_URI_1,'A_B_1') as ISDODataObjectEx;
  1382. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A')));
  1383. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_1')));
  1384. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'B')));
  1385. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2')));
  1386. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C')));
  1387. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C_D')));
  1388. locO := locFac.createNew(s_URI_1,'A_B_2') as ISDODataObjectEx;
  1389. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A')));
  1390. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2')));
  1391. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'B')));
  1392. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_1')));
  1393. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C')));
  1394. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C_D')));
  1395. locO := locFac.createNew(s_URI_1,'A_B_2_C') as ISDODataObjectEx;
  1396. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A')));
  1397. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2')));
  1398. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C')));
  1399. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'B')));
  1400. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_1')));
  1401. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C_D')));
  1402. locO := locFac.createNew(s_URI_1,'A_B_2_C_D') as ISDODataObjectEx;
  1403. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A')));
  1404. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2')));
  1405. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C')));
  1406. CheckEquals(True, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_2_C_D')));
  1407. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'B')));
  1408. CheckEquals(False, locO.IsInstanceOf(locFac.getType(s_URI_1,'A_B_1')));
  1409. end;
  1410. procedure TSDOBaseDataObject_Test.object_setDataObject_ref();
  1411. const
  1412. s_uri = 'u';
  1413. var
  1414. locFac : ISDODataFactory;
  1415. a, b : ISDODataObject;
  1416. tfg : TTypeFlags;
  1417. begin
  1418. tfg := [];
  1419. if is_open_type() then
  1420. Include(tfg,tfIsOpen);
  1421. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1422. locFac.AddType(s_uri,'a',tfg);
  1423. locFac.AddType(s_uri,'b',tfg);
  1424. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[]);
  1425. a := locFac.createNew(s_uri,'a');
  1426. b := locFac.createNew(s_uri,'b');
  1427. a.setDataObject('p_ab',b);
  1428. end;
  1429. procedure TSDOBaseDataObject_Test.get_integer_xpath();
  1430. function local_create_factory() : ISDODataFactory;
  1431. var
  1432. res : ISDODataFactory;
  1433. tfg : TTypeFlags;
  1434. begin
  1435. tfg := [];
  1436. if is_open_type() then
  1437. Include(tfg,tfIsOpen);
  1438. res := TSDODataFactory.Create() as ISDODataFactory;
  1439. res.AddType(s_URI_1,s_TYPE_1,tfg);
  1440. res.AddType(s_URI_1,s_TYPE_2,tfg);
  1441. res.AddType(s_URI_1,s_TYPE_3,tfg);
  1442. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_INTEGER_1,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  1443. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_INTEGER_2,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  1444. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  1445. res.addProperty(s_URI_1,s_TYPE_2,s_PROP_INTEGER_A,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  1446. res.addProperty(s_URI_1,s_TYPE_2,s_PROP_INTEGER_B,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  1447. Result := res;
  1448. end;
  1449. var
  1450. locFac : ISDODataFactory;
  1451. o1, o2 : ISDODataObject;
  1452. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOInteger;
  1453. begin
  1454. o1_val_1 := RandomRange(-12345,12345);
  1455. o1_val_2 := RandomRange(-12345,12345);
  1456. o2_val_A := RandomRange(-12345,12345);
  1457. o2_val_B := RandomRange(-12345,12345);
  1458. locFac := local_create_factory();
  1459. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  1460. o1.setInteger(s_PROP_INTEGER_1,o1_val_1);
  1461. o1.setInteger(s_PROP_INTEGER_2,o1_val_2);
  1462. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  1463. o2.setInteger(s_PROP_INTEGER_A,o2_val_A);
  1464. o2.setInteger(s_PROP_INTEGER_B,o2_val_B);
  1465. check_xpath_value(o1_val_1, o1,s_PROP_INTEGER_1);
  1466. check_xpath_value(o1_val_2, o1, s_PROP_INTEGER_2);
  1467. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,s_PROP_INTEGER_A]));
  1468. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,s_PROP_INTEGER_B]));
  1469. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',s_PROP_INTEGER_1]));
  1470. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',s_PROP_INTEGER_2]));
  1471. end;
  1472. procedure TSDOBaseDataObject_Test.check_xpath_value(
  1473. const AExpected: TSDOInteger;
  1474. const AObject: ISDODataObject;
  1475. const AXPath: string
  1476. );
  1477. begin
  1478. CheckEquals(AExpected,AObject.getInteger(AXPath), AXPath);
  1479. end;
  1480. procedure TSDOBaseDataObject_Test.property_default_value_integer();
  1481. const
  1482. VAL_1 : TSDOInteger = 1210;
  1483. var
  1484. locFactory : ISDODataFactory;
  1485. locA : ISDODataObject;
  1486. locProp : ISDOProperty;
  1487. tfg : TTypeFlags;
  1488. begin
  1489. tfg := [];
  1490. if is_open_type() then
  1491. Include(tfg,tfIsOpen);
  1492. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  1493. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  1494. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_INTEGER_1,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  1495. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_INTEGER_1);
  1496. locProp.setDefault(VAL_1);
  1497. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  1498. CheckEquals(VAL_1, locA.getInteger(locProp), 'getInteger');
  1499. CheckEquals(False, locA.isSet(locProp), 'isSet');
  1500. end;
  1501. procedure TSDOBaseDataObject_Test.property_default_value_unset_integer();
  1502. const
  1503. VAL_1 = 1210; VAL_2 = 789;
  1504. var
  1505. locFactory : ISDODataFactory;
  1506. locA : ISDODataObject;
  1507. locProp : ISDOProperty;
  1508. tfg : TTypeFlags;
  1509. begin
  1510. tfg := [];
  1511. if is_open_type() then
  1512. Include(tfg,tfIsOpen);
  1513. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  1514. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  1515. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_INTEGER_1,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  1516. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_INTEGER_1);
  1517. locProp.setDefault(TSDOInteger(VAL_1));
  1518. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  1519. locA.setInteger(locProp, VAL_2);
  1520. CheckEquals(True, locA.isSet(locProp), 'isSet');
  1521. CheckEquals(VAL_2, locA.getInteger(locProp), 'getInteger');
  1522. locA.unset(locProp);
  1523. CheckEquals(False, locA.isSet(locProp), 'isSet');
  1524. CheckEquals(VAL_1, locA.getInteger(locProp), 'getInteger');
  1525. end;
  1526. procedure TSDOBaseDataObject_Test.property_default_value_bool();
  1527. const
  1528. VAL_1 = True;
  1529. var
  1530. locFactory : ISDODataFactory;
  1531. locA : ISDODataObject;
  1532. locProp : ISDOProperty;
  1533. tfg : TTypeFlags;
  1534. begin
  1535. tfg := [];
  1536. if is_open_type() then
  1537. Include(tfg,tfIsOpen);
  1538. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  1539. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  1540. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_BOOL_1,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[]);
  1541. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_BOOL_1);
  1542. locProp.setDefault(VAL_1);
  1543. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  1544. CheckEquals(VAL_1, locA.getBoolean(locProp), 'getBoolean');
  1545. CheckEquals(False, locA.isSet(locProp), 'isSet');
  1546. end;
  1547. procedure TSDOBaseDataObject_Test.property_default_value_unset_bool();
  1548. const
  1549. VAL_1 = True; VAL_2 = False;
  1550. var
  1551. locFactory : ISDODataFactory;
  1552. locA : ISDODataObject;
  1553. locProp : ISDOProperty;
  1554. tfg : TTypeFlags;
  1555. begin
  1556. tfg := [];
  1557. if is_open_type() then
  1558. Include(tfg,tfIsOpen);
  1559. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  1560. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  1561. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_BOOL_1,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[]);
  1562. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_BOOL_1);
  1563. locProp.setDefault(VAL_1);
  1564. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  1565. locA.setBoolean(locProp, VAL_2);
  1566. CheckEquals(True, locA.isSet(locProp), 'isSet');
  1567. CheckEquals(VAL_2, locA.getBoolean(locProp), 'getBoolean');
  1568. locA.unset(locProp);
  1569. CheckEquals(False, locA.isSet(locProp), 'isSet');
  1570. CheckEquals(VAL_1, locA.getBoolean(locProp), 'getBoolean');
  1571. end;
  1572. procedure TSDOBaseDataObject_Test.property_default_value_string();
  1573. const
  1574. VAL_1 = 'Kiswendsida O.';
  1575. var
  1576. locFactory : ISDODataFactory;
  1577. locA : ISDODataObject;
  1578. locProp : ISDOProperty;
  1579. tfg : TTypeFlags;
  1580. begin
  1581. tfg := [];
  1582. if is_open_type() then
  1583. Include(tfg,tfIsOpen);
  1584. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  1585. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  1586. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_STR_1,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1587. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_STR_1);
  1588. locProp.setDefault(VAL_1);
  1589. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  1590. CheckEquals(VAL_1, locA.getString(locProp), 'getString');
  1591. CheckEquals(False, locA.isSet(locProp), 'isSet');
  1592. end;
  1593. procedure TSDOBaseDataObject_Test.property_default_value_unset_string;
  1594. const
  1595. VAL_1 = 'O. A. Kiswensida'; VAL_2 = 'sssszzeerrff';
  1596. var
  1597. locFactory : ISDODataFactory;
  1598. locA : ISDODataObject;
  1599. locProp : ISDOProperty;
  1600. tfg : TTypeFlags;
  1601. begin
  1602. tfg := [];
  1603. if is_open_type() then
  1604. Include(tfg,tfIsOpen);
  1605. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  1606. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  1607. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_STR_1,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1608. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_STR_1);
  1609. locProp.setDefault(VAL_1);
  1610. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  1611. locA.setString(locProp, VAL_2);
  1612. CheckEquals(True, locA.isSet(locProp), 'isSet');
  1613. CheckEquals(VAL_2, locA.getString(locProp), 'getString');
  1614. locA.unset(locProp);
  1615. CheckEquals(False, locA.isSet(locProp), 'isSet');
  1616. CheckEquals(VAL_1, locA.getString(locProp), 'getString');
  1617. end;
  1618. procedure TSDOBaseDataObject_Test.object_ref_multivalue();
  1619. const LOCAL_PROP = s_PROP_OBJ_REF_LIST;
  1620. var
  1621. val_list : array of ISDODataObject;
  1622. obj : ISDODataObject;
  1623. ls, ls1 : ISDODataObjectList;
  1624. local_array_len, i : PtrInt;
  1625. crs : ILinkedListCursor;
  1626. ok : Boolean;
  1627. xtraObj : ISDODataObject;
  1628. begin
  1629. Randomize();
  1630. local_array_len := RandomRange(0,100);
  1631. SetLength(val_list,local_array_len);
  1632. try
  1633. for i := 0 to Pred(local_array_len) do
  1634. val_list[i] := FFactory.createNew(s_URI_1,s_TYPE_2);
  1635. obj := Create_Object();
  1636. ok := False;
  1637. try
  1638. ls := obj.getList(s_PROP_BOOL_1);
  1639. except
  1640. on e : ESDOIllegalArgumentException do begin
  1641. ok := True;
  1642. end;
  1643. end;
  1644. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  1645. ls := obj.getList(LOCAL_PROP);
  1646. Check(ls <> nil);
  1647. ls1 := obj.getList(LOCAL_PROP);
  1648. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  1649. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  1650. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  1651. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  1652. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  1653. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  1654. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  1655. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  1656. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  1657. CheckEquals(0,ls.size(),'Size');
  1658. for i := 0 to Pred(local_array_len) do begin
  1659. ls.append(val_list[i]);
  1660. end;
  1661. crs := ls.getCursor();
  1662. Check(crs <> nil,'ls.getCursor()');
  1663. crs.Reset();
  1664. CheckEquals(local_array_len,ls.size(),'Size');
  1665. for i := 0 to Pred(local_array_len) do begin
  1666. crs.MoveNext();
  1667. CheckEquals(PtrUInt(val_list[i]),PtrUInt(ls.getDataObject()),Format('append(%d) <> getDataObject(%d)',[i,i]));
  1668. CheckEquals(PtrUInt(nil),PtrUInt(ls.getDataObject().getContainer()),Format('nil <> getDataObject(%d).getContainer()',[i]));
  1669. end;
  1670. xtraObj := FFactory.createNew(s_URI_3,s_TYPE_3);
  1671. ok := False;
  1672. try
  1673. ls.append(xtraObj);
  1674. except
  1675. on e : ESDOIllegalArgumentException do
  1676. ok := True;
  1677. end;
  1678. Check(ok, 'Adding an different object type.');
  1679. finally
  1680. SetLength(val_list,0);
  1681. end;
  1682. end;
  1683. procedure TSDOBaseDataObject_Test.object_cont_multivalue();
  1684. const LOCAL_PROP = s_PROP_OBJ_CONT_LIST;
  1685. var
  1686. val_list : array of ISDODataObject;
  1687. obj : ISDODataObject;
  1688. ls, ls1 : ISDODataObjectList;
  1689. local_array_len, i : PtrInt;
  1690. crs : ILinkedListCursor;
  1691. ok : Boolean;
  1692. xtraObj : ISDODataObject;
  1693. begin
  1694. Randomize();
  1695. local_array_len := RandomRange(0,100);
  1696. SetLength(val_list,local_array_len);
  1697. try
  1698. for i := 0 to Pred(local_array_len) do
  1699. val_list[i] := FFactory.createNew(s_URI_1,s_TYPE_2);
  1700. obj := Create_Object();
  1701. ok := False;
  1702. try
  1703. ls := obj.getList(s_PROP_BOOL_1);
  1704. except
  1705. on e : ESDOIllegalArgumentException do begin
  1706. ok := True;
  1707. end;
  1708. end;
  1709. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  1710. ls := obj.getList(LOCAL_PROP);
  1711. Check(ls <> nil);
  1712. ls1 := obj.getList(LOCAL_PROP);
  1713. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  1714. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  1715. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  1716. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  1717. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  1718. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  1719. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  1720. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  1721. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  1722. CheckEquals(0,ls.size(),'Size');
  1723. for i := 0 to Pred(local_array_len) do begin
  1724. ls.append(val_list[i]);
  1725. end;
  1726. crs := ls.getCursor();
  1727. Check(crs <> nil,'ls.getCursor()');
  1728. crs.Reset();
  1729. CheckEquals(local_array_len,ls.size(),'Size');
  1730. for i := 0 to Pred(local_array_len) do begin
  1731. crs.MoveNext();
  1732. CheckEquals(PtrUInt(val_list[i]),PtrUInt(ls.getDataObject()),Format('append(%d) <> getDataObject(%d)',[i,i]));
  1733. CheckEquals(PtrUInt(obj),PtrUInt(ls.getDataObject().getContainer()),Format('obj <> getDataObject(%d).getContainer()',[i]));
  1734. end;
  1735. xtraObj := FFactory.createNew(s_URI_3,s_TYPE_3);
  1736. ok := False;
  1737. try
  1738. ls.append(xtraObj);
  1739. except
  1740. on e : ESDOIllegalArgumentException do
  1741. ok := True;
  1742. end;
  1743. Check(ok, 'Adding an different object type.');
  1744. finally
  1745. SetLength(val_list,0);
  1746. end;
  1747. end;
  1748. procedure TSDOBaseDataObject_Test.object_destroy_order();
  1749. var
  1750. locFac : ISDODataFactory;
  1751. locA, locB : ISDODataObject;
  1752. begin
  1753. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1754. locFac.AddType(s_URI_1,'a',[]);
  1755. locFac.AddType(s_URI_1,'b',[]);
  1756. locFac.addProperty(s_URI_1,'a','p_ab',s_URI_1,'b',[]);
  1757. locA := locFac.createNew(s_URI_1,'a');
  1758. locB := locFac.createNew(s_URI_1,'b');
  1759. locA.setDataObject('p_ab', locB);
  1760. locA := nil;
  1761. locB := nil;
  1762. end;
  1763. procedure TSDOBaseDataObject_Test.object_getChangeSummary();
  1764. var
  1765. locFac : ISDODataFactory;
  1766. locA, locB_Ref, locB_Cont : ISDODataObject;
  1767. locCS : ISDOChangeSummary;
  1768. begin
  1769. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1770. locFac.AddType(s_URI_1,'a',[]);
  1771. locFac.AddType(s_URI_1,'b',[]);
  1772. locFac.addProperty(s_URI_1,'a','p_ab_ref',s_URI_1,'b',[]);
  1773. locFac.addProperty(s_URI_1,'a','p_ab_cont',s_URI_1,'b',[pfIsContainment]);
  1774. locFac.addProperty(s_URI_1,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  1775. locA := locFac.createNew(s_URI_1,'a');
  1776. locB_Cont := locFac.createNew(s_URI_1,'b');
  1777. locB_Ref := locFac.createNew(s_URI_1,'b');
  1778. locCS := locA.getChangeSummary();
  1779. CheckNotEquals(PtrUInt(nil), PtrUInt(locCS));
  1780. CheckEquals(PtrUInt(nil), PtrUInt(locB_Cont.getChangeSummary()));
  1781. CheckEquals(PtrUInt(nil), PtrUInt(locB_Ref.getChangeSummary()));
  1782. locA.setDataObject('p_ab_cont', locB_Cont);
  1783. CheckEquals(PtrUInt(locCS), PtrUInt(locB_Cont.getChangeSummary()));
  1784. locA.setDataObject('p_ab_cont', nil);
  1785. CheckEquals(PtrUInt(nil), PtrUInt(locB_Cont.getChangeSummary()));
  1786. locA.setDataObject('p_ab_ref', locB_Ref);
  1787. CheckEquals(PtrUInt(nil), PtrUInt(locB_Cont.getChangeSummary()));
  1788. locA.setDataObject('p_ab_ref', nil);
  1789. CheckEquals(PtrUInt(nil), PtrUInt(locB_Ref.getChangeSummary()));
  1790. end;
  1791. procedure TSDOBaseDataObject_Test.object_getChangeSummary_multiprop();
  1792. var
  1793. locFac : ISDODataFactory;
  1794. locA, locB_Ref, locB_Cont : ISDODataObject;
  1795. locCS : ISDOChangeSummary;
  1796. begin
  1797. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1798. locFac.AddType(s_URI_1,'a',[]);
  1799. locFac.AddType(s_URI_1,'b',[]);
  1800. locFac.addProperty(s_URI_1,'a','p_ab_ref',s_URI_1,'b',[pfIsMany]);
  1801. locFac.addProperty(s_URI_1,'a','p_ab_cont',s_URI_1,'b',[pfIsContainment,pfIsMany]);
  1802. locFac.addProperty(s_URI_1,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  1803. locA := locFac.createNew(s_URI_1,'a');
  1804. locB_Cont := locFac.createNew(s_URI_1,'b');
  1805. locB_Ref := locFac.createNew(s_URI_1,'b');
  1806. locCS := locA.getChangeSummary();
  1807. CheckNotEquals(PtrUInt(nil), PtrUInt(locCS));
  1808. CheckEquals(PtrUInt(nil), PtrUInt(locB_Cont.getChangeSummary()));
  1809. CheckEquals(PtrUInt(nil), PtrUInt(locB_Ref.getChangeSummary()));
  1810. locA.getList('p_ab_cont').append(locB_Cont);
  1811. CheckEquals(PtrUInt(locCS), PtrUInt(locB_Cont.getChangeSummary()));
  1812. locA.getList('p_ab_cont').delete(0);
  1813. CheckEquals(PtrUInt(nil), PtrUInt(locB_Cont.getChangeSummary()));
  1814. locA.getList('p_ab_ref').append(locB_Ref);
  1815. CheckEquals(PtrUInt(nil), PtrUInt(locB_Cont.getChangeSummary()));
  1816. locA.getList('p_ab_ref').delete(0);
  1817. CheckEquals(PtrUInt(nil), PtrUInt(locB_Ref.getChangeSummary()));
  1818. end;
  1819. procedure TSDOBaseDataObject_Test.byte_procs();
  1820. const VAL_1 : TSDOByte = 12; VAL_2 : TSDOByte = 56; VAL_3 : TSDOByte = 0;
  1821. var
  1822. obj : ISDODataObject;
  1823. ok : Boolean;
  1824. begin
  1825. obj := Create_Object();
  1826. ok := False;
  1827. try
  1828. obj.setByte(obj.getProperty('qsdc'),VAL_1);
  1829. except
  1830. on e : ESDOPropertyNotFoundException do begin
  1831. ok := True;
  1832. end;
  1833. end;
  1834. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  1835. ok := False;
  1836. try
  1837. obj.getByte(obj.getProperty('qsdc'));
  1838. except
  1839. on e : ESDOPropertyNotFoundException do begin
  1840. ok := True;
  1841. end;
  1842. end;
  1843. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  1844. ok := False;
  1845. try
  1846. obj.setByte(obj.getProperty(s_PROP_BYTE_3),VAL_1);
  1847. except
  1848. on e : ESDOIllegalArgumentException do begin
  1849. ok := True;
  1850. end;
  1851. end;
  1852. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  1853. obj.setByte(obj.getProperty(s_PROP_BYTE_1),VAL_1);
  1854. CheckEquals(VAL_1,obj.getByte(obj.getProperty(s_PROP_BYTE_1)));
  1855. CheckEquals(VAL_1,obj.getByte(s_PROP_BYTE_1));
  1856. CheckEquals(VAL_1,obj.getByte(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTE_1))));
  1857. obj.setByte(obj.getProperty(s_PROP_BYTE_1),VAL_2);
  1858. CheckEquals(VAL_2,obj.getByte(obj.getProperty(s_PROP_BYTE_1)));
  1859. CheckEquals(VAL_2,obj.getByte(s_PROP_BYTE_1));
  1860. CheckEquals(VAL_2,obj.getByte(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTE_1))));
  1861. obj.setByte(obj.getProperty(s_PROP_BYTE_1),VAL_3);
  1862. CheckEquals(VAL_3,obj.getByte(obj.getProperty(s_PROP_BYTE_1)));
  1863. CheckEquals(VAL_3,obj.getByte(s_PROP_BYTE_1));
  1864. CheckEquals(VAL_3,obj.getByte(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTE_1))));
  1865. obj.setByte(obj.getProperty(s_PROP_BYTE_2),VAL_1);
  1866. CheckEquals(VAL_1,obj.getByte(obj.getProperty(s_PROP_BYTE_2)));
  1867. CheckEquals(VAL_1,obj.getByte(s_PROP_BYTE_2));
  1868. CheckEquals(VAL_1,obj.getByte(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTE_2))));
  1869. obj.setByte(obj.getProperty(s_PROP_BYTE_2),VAL_2);
  1870. CheckEquals(VAL_2,obj.getByte(obj.getProperty(s_PROP_BYTE_2)));
  1871. CheckEquals(VAL_2,obj.getByte(s_PROP_BYTE_2));
  1872. CheckEquals(VAL_2,obj.getByte(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTE_2))));
  1873. obj.setByte(obj.getProperty(s_PROP_BYTE_2),VAL_3);
  1874. CheckEquals(VAL_3,obj.getByte(obj.getProperty(s_PROP_BYTE_2)));
  1875. CheckEquals(VAL_3,obj.getByte(s_PROP_BYTE_2));
  1876. CheckEquals(VAL_3,obj.getByte(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTE_2))));
  1877. end;
  1878. procedure TSDOBaseDataObject_Test.byte_multivalue();
  1879. const LOCAL_PROP = s_PROP_BYTE_3; LOCAL_ARRAY_LEN = 100;
  1880. var
  1881. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDOByte;
  1882. procedure PrepareArray();
  1883. var
  1884. k : Integer;
  1885. begin
  1886. Randomize();
  1887. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  1888. val_list[k] := Random(High(TSDOByte));
  1889. end;
  1890. end;
  1891. var
  1892. obj : ISDODataObject;
  1893. ls, ls1 : ISDODataObjectList;
  1894. i : Integer;
  1895. crs : ILinkedListCursor;
  1896. ok : Boolean;
  1897. begin
  1898. PrepareArray();
  1899. obj := Create_Object();
  1900. ok := False;
  1901. try
  1902. ls := obj.getList(s_PROP_BOOL_1);
  1903. except
  1904. on e : ESDOIllegalArgumentException do begin
  1905. ok := True;
  1906. end;
  1907. end;
  1908. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  1909. ls := obj.getList(LOCAL_PROP);
  1910. Check(ls <> nil);
  1911. ls1 := obj.getList(LOCAL_PROP);
  1912. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  1913. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  1914. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  1915. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  1916. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  1917. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  1918. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  1919. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  1920. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  1921. CheckEquals(0,ls.size(),'Size');
  1922. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  1923. ls.append(val_list[i]);
  1924. end;
  1925. crs := ls.getCursor();
  1926. Check(crs <> nil,'ls.getCursor()');
  1927. crs.Reset();
  1928. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  1929. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  1930. crs.MoveNext();
  1931. CheckEquals(val_list[i],ls.getByte(),'append() <> getByte()');
  1932. end;
  1933. end;
  1934. procedure TSDOBaseDataObject_Test.byte_unset_isset();
  1935. const
  1936. LOCAL_PROP = s_PROP_BYTE_1;
  1937. LOCAL_PROP_ARRAY = s_PROP_BYTE_3;
  1938. VAL_1 : TSDOByte = 12; VAL_2 : TSDOByte = 76;
  1939. var
  1940. obj : ISDODataObject;
  1941. ls : ISDODataObjectList;
  1942. begin
  1943. obj := Create_Object();
  1944. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1945. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  1946. obj.setByte(LOCAL_PROP, VAL_1);
  1947. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1948. obj.unset(LOCAL_PROP);
  1949. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1950. CheckEquals(obj.getProperty(LOCAL_PROP).getByteDefault(),obj.getByte(LOCAL_PROP),'"unSet" should restore the default value');
  1951. obj.setByte(LOCAL_PROP, VAL_2);
  1952. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1953. obj.unset(LOCAL_PROP);
  1954. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  1955. ls := obj.getList(LOCAL_PROP_ARRAY);
  1956. Check(ls <> nil);
  1957. CheckEquals(0,ls.size());
  1958. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  1959. ls.append(VAL_1);
  1960. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  1961. obj.unset(LOCAL_PROP_ARRAY);
  1962. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1963. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  1964. CheckEquals(0,ls.size());
  1965. ls.append(VAL_1);
  1966. ls.append(VAL_2);
  1967. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  1968. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1969. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  1970. CheckEquals(2,ls.size());
  1971. obj.unset(LOCAL_PROP_ARRAY);
  1972. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  1973. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  1974. CheckEquals(0,ls.size());
  1975. end;
  1976. procedure TSDOBaseDataObject_Test.byte_setnull_isnull();
  1977. const
  1978. LOCAL_PROP = s_PROP_BYTE_1;
  1979. LOCAL_PROP_ARRAY = s_PROP_BYTE_3;
  1980. VAL_1 : TSDOByte = 12;
  1981. var
  1982. obj : ISDODataObject;
  1983. begin
  1984. obj := Create_Object();
  1985. // these _does_ depend on the property's default
  1986. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1987. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  1988. obj.setByte(LOCAL_PROP, VAL_1);
  1989. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1990. obj.setNull(LOCAL_PROP);
  1991. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  1992. CheckEquals(0,obj.getByte(LOCAL_PROP),LOCAL_PROP);
  1993. end;
  1994. procedure TSDOBaseDataObject_Test.property_default_value_byte();
  1995. const
  1996. VAL_1 : TSDOByte = 12;
  1997. var
  1998. locFactory : ISDODataFactory;
  1999. locA : ISDODataObject;
  2000. locProp : ISDOProperty;
  2001. tfg : TTypeFlags;
  2002. begin
  2003. tfg := [];
  2004. if is_open_type() then
  2005. Include(tfg,tfIsOpen);
  2006. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2007. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  2008. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_BYTE_1,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  2009. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_BYTE_1);
  2010. locProp.setDefault(VAL_1);
  2011. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  2012. CheckEquals(VAL_1, locA.getByte(locProp), 'getByte');
  2013. CheckEquals(False, locA.isSet(locProp), 'isSet');
  2014. end;
  2015. procedure TSDOBaseDataObject_Test.property_default_value_unset_byte();
  2016. const
  2017. VAL_1 : TSDOByte = 12; VAL_2 : TSDOByte = 89;
  2018. var
  2019. locFactory : ISDODataFactory;
  2020. locA : ISDODataObject;
  2021. locProp : ISDOProperty;
  2022. tfg : TTypeFlags;
  2023. begin
  2024. tfg := [];
  2025. if is_open_type() then
  2026. Include(tfg,tfIsOpen);
  2027. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2028. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  2029. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_BYTE_1,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  2030. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_BYTE_1);
  2031. locProp.setDefault(TSDOByte(VAL_1));
  2032. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  2033. locA.setByte(locProp, VAL_2);
  2034. CheckEquals(True, locA.isSet(locProp), 'isSet');
  2035. CheckEquals(VAL_2, locA.getByte(locProp), 'getByte');
  2036. locA.unset(locProp);
  2037. CheckEquals(False, locA.isSet(locProp), 'isSet');
  2038. CheckEquals(VAL_1, locA.getByte(locProp), 'getByte');
  2039. end;
  2040. {$IFDEF HAS_SDO_BYTES}
  2041. procedure TSDOBaseDataObject_Test.bytes_procs();
  2042. var
  2043. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  2044. procedure SetConstants();
  2045. var
  2046. v : TSDOBytes;
  2047. k : Integer;
  2048. begin
  2049. SetLength(v,100);
  2050. for k := 0 to High(v) do
  2051. v[k] := k mod High(Byte);
  2052. VAL_1 := v;
  2053. v := nil;
  2054. VAL_2 := nil;
  2055. SetLength(v,200);
  2056. for k := 0 to High(v) do
  2057. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  2058. VAL_3 := v;
  2059. end;
  2060. var
  2061. obj : ISDODataObject;
  2062. ok : Boolean;
  2063. begin
  2064. SetConstants();
  2065. obj := Create_Object();
  2066. ok := False;
  2067. try
  2068. obj.setBytes(obj.getProperty('qsdc'),VAL_1);
  2069. except
  2070. on e : ESDOPropertyNotFoundException do begin
  2071. ok := True;
  2072. end;
  2073. end;
  2074. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  2075. ok := False;
  2076. try
  2077. obj.getBytes(obj.getProperty('qsdc'));
  2078. except
  2079. on e : ESDOPropertyNotFoundException do begin
  2080. ok := True;
  2081. end;
  2082. end;
  2083. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  2084. ok := False;
  2085. try
  2086. obj.setBytes(obj.getProperty(s_PROP_BYTES_3),VAL_1);
  2087. except
  2088. on e : ESDOIllegalArgumentException do begin
  2089. ok := True;
  2090. end;
  2091. end;
  2092. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  2093. obj.setBytes(obj.getProperty(s_PROP_BYTES_1),VAL_1);
  2094. CheckEquals(VAL_1,obj.getBytes(obj.getProperty(s_PROP_BYTES_1)));
  2095. CheckEquals(VAL_1,obj.getBytes(s_PROP_BYTES_1));
  2096. CheckEquals(VAL_1,obj.getBytes(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTES_1))));
  2097. obj.setBytes(obj.getProperty(s_PROP_BYTES_1),VAL_2);
  2098. CheckEquals(VAL_2,obj.getBytes(obj.getProperty(s_PROP_BYTES_1)));
  2099. CheckEquals(VAL_2,obj.getBytes(s_PROP_BYTES_1));
  2100. CheckEquals(VAL_2,obj.getBytes(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTES_1))));
  2101. obj.setBytes(obj.getProperty(s_PROP_BYTES_1),VAL_3);
  2102. CheckEquals(VAL_3,obj.getBytes(obj.getProperty(s_PROP_BYTES_1)));
  2103. CheckEquals(VAL_3,obj.getBytes(s_PROP_BYTES_1));
  2104. CheckEquals(VAL_3,obj.getBytes(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTES_1))));
  2105. obj.setBytes(obj.getProperty(s_PROP_BYTES_2),VAL_1);
  2106. CheckEquals(VAL_1,obj.getBytes(obj.getProperty(s_PROP_BYTES_2)));
  2107. CheckEquals(VAL_1,obj.getBytes(s_PROP_BYTES_2));
  2108. CheckEquals(VAL_1,obj.getBytes(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTES_2))));
  2109. obj.setBytes(obj.getProperty(s_PROP_BYTES_2),VAL_2);
  2110. CheckEquals(VAL_2,obj.getBytes(obj.getProperty(s_PROP_BYTES_2)));
  2111. CheckEquals(VAL_2,obj.getBytes(s_PROP_BYTES_2));
  2112. CheckEquals(VAL_2,obj.getBytes(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTES_2))));
  2113. obj.setBytes(obj.getProperty(s_PROP_BYTES_2),VAL_3);
  2114. CheckEquals(VAL_3,obj.getBytes(obj.getProperty(s_PROP_BYTES_2)));
  2115. CheckEquals(VAL_3,obj.getBytes(s_PROP_BYTES_2));
  2116. CheckEquals(VAL_3,obj.getBytes(obj.getPropertyIndex(obj.getProperty(s_PROP_BYTES_2))));
  2117. end;
  2118. procedure TSDOBaseDataObject_Test.bytes_multivalue();
  2119. const LOCAL_PROP = s_PROP_BYTES_3; LOCAL_ARRAY_LEN = 100;
  2120. var
  2121. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDOBytes;
  2122. procedure PrepareArray();
  2123. var
  2124. k, h : Integer;
  2125. e : TSDOBytes;
  2126. begin
  2127. Randomize();
  2128. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2129. e := nil;
  2130. SetLength(e,RandomRange(0,1000));
  2131. if ( Length(e) > 0 ) then begin
  2132. for h := Low(e) to High(e) do
  2133. e[h] := RandomRange(Low(Byte),High(Byte));
  2134. end;
  2135. val_list[k] := e;
  2136. end;
  2137. end;
  2138. var
  2139. obj : ISDODataObject;
  2140. ls, ls1 : ISDODataObjectList;
  2141. i : Integer;
  2142. crs : ILinkedListCursor;
  2143. ok : Boolean;
  2144. begin
  2145. PrepareArray();
  2146. obj := Create_Object();
  2147. ok := False;
  2148. try
  2149. ls := obj.getList(s_PROP_BOOL_1);
  2150. except
  2151. on e : ESDOIllegalArgumentException do begin
  2152. ok := True;
  2153. end;
  2154. end;
  2155. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  2156. ls := obj.getList(LOCAL_PROP);
  2157. Check(ls <> nil);
  2158. ls1 := obj.getList(LOCAL_PROP);
  2159. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  2160. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  2161. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  2162. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  2163. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  2164. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  2165. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  2166. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  2167. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  2168. CheckEquals(0,ls.size(),'Size');
  2169. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2170. ls.appendBytes(val_list[i]);
  2171. end;
  2172. crs := ls.getCursor();
  2173. Check(crs <> nil,'ls.getCursor()');
  2174. crs.Reset();
  2175. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  2176. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2177. crs.MoveNext();
  2178. CheckEquals(val_list[i],ls.getBytes(),'append() <> getBytes()');
  2179. end;
  2180. end;
  2181. procedure TSDOBaseDataObject_Test.bytes_unset_isset();
  2182. const
  2183. LOCAL_PROP = s_PROP_BYTES_1;
  2184. LOCAL_PROP_ARRAY = s_PROP_BYTES_3;
  2185. var
  2186. VAL_1, VAL_2 : TSDOBytes;
  2187. procedure SetConstants();
  2188. var
  2189. v : TSDOBytes;
  2190. k : Integer;
  2191. begin
  2192. SetLength(v,100);
  2193. for k := 0 to High(v) do
  2194. v[k] := k mod High(Byte);
  2195. VAL_1 := v;
  2196. v := nil;
  2197. SetLength(v,200);
  2198. for k := 0 to High(v) do
  2199. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  2200. VAL_2 := v;
  2201. end;
  2202. var
  2203. obj : ISDODataObject;
  2204. ls : ISDODataObjectList;
  2205. begin
  2206. SetConstants();
  2207. obj := Create_Object();
  2208. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2209. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  2210. obj.setBytes(LOCAL_PROP, VAL_1);
  2211. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2212. obj.unset(LOCAL_PROP);
  2213. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2214. CheckEquals(obj.getProperty(LOCAL_PROP).getBytesDefault(),obj.getBytes(LOCAL_PROP),'"unSet" should restore the default value');
  2215. obj.setBytes(LOCAL_PROP, VAL_2);
  2216. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2217. obj.unset(LOCAL_PROP);
  2218. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2219. ls := obj.getList(LOCAL_PROP_ARRAY);
  2220. Check(ls <> nil);
  2221. CheckEquals(0,ls.size());
  2222. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  2223. ls.appendBytes(VAL_1);
  2224. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  2225. obj.unset(LOCAL_PROP_ARRAY);
  2226. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2227. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  2228. CheckEquals(0,ls.size());
  2229. ls.appendBytes(VAL_1);
  2230. ls.appendBytes(VAL_2);
  2231. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  2232. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2233. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  2234. CheckEquals(2,ls.size());
  2235. obj.unset(LOCAL_PROP_ARRAY);
  2236. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2237. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  2238. CheckEquals(0,ls.size());
  2239. end;
  2240. procedure TSDOBaseDataObject_Test.bytes_setnull_isnull();
  2241. const
  2242. LOCAL_PROP = s_PROP_BYTES_1;
  2243. LOCAL_PROP_ARRAY = s_PROP_BYTES_3;
  2244. var
  2245. VAL_1 : TSDOBytes;
  2246. procedure SetConstants();
  2247. var
  2248. v : TSDOBytes;
  2249. k : Integer;
  2250. begin
  2251. SetLength(v,100);
  2252. for k := 0 to High(v) do
  2253. v[k] := k mod High(Byte);
  2254. VAL_1 := v;
  2255. end;
  2256. var
  2257. obj : ISDODataObject;
  2258. begin
  2259. SetConstants();
  2260. obj := Create_Object();
  2261. // these _does_ depend on the property's default
  2262. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2263. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  2264. obj.setBytes(LOCAL_PROP, VAL_1);
  2265. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2266. obj.setNull(LOCAL_PROP);
  2267. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2268. CheckEquals(TSDOBytes(nil),obj.getBytes(LOCAL_PROP),LOCAL_PROP);
  2269. end;
  2270. procedure TSDOBaseDataObject_Test.property_default_value_bytes();
  2271. var
  2272. VAL_1 : TSDOBytes;
  2273. procedure SetConstants();
  2274. var
  2275. v : TSDOBytes;
  2276. k : Integer;
  2277. begin
  2278. SetLength(v,100);
  2279. for k := 0 to High(v) do
  2280. v[k] := k mod High(Byte);
  2281. VAL_1 := v;
  2282. end;
  2283. var
  2284. locFactory : ISDODataFactory;
  2285. locA : ISDODataObject;
  2286. locProp : ISDOProperty;
  2287. tfg : TTypeFlags;
  2288. begin
  2289. SetConstants();
  2290. tfg := [];
  2291. if is_open_type() then
  2292. Include(tfg,tfIsOpen);
  2293. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2294. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  2295. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_BYTES_1,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[]);
  2296. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_BYTES_1);
  2297. locProp.setDefault(VAL_1);
  2298. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  2299. CheckEquals(VAL_1, locA.getBytes(locProp), 'getBytes');
  2300. CheckEquals(False, locA.isSet(locProp), 'isSet');
  2301. end;
  2302. procedure TSDOBaseDataObject_Test.property_default_value_unset_bytes();
  2303. var
  2304. VAL_1, VAL_2 : TSDOBytes;
  2305. procedure SetConstants();
  2306. var
  2307. v : TSDOBytes;
  2308. k : Integer;
  2309. begin
  2310. SetLength(v,100);
  2311. for k := 0 to High(v) do
  2312. v[k] := k mod High(Byte);
  2313. VAL_1 := v;
  2314. v := nil;
  2315. SetLength(v,200);
  2316. for k := 0 to High(v) do
  2317. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  2318. VAL_2 := v;
  2319. end;
  2320. var
  2321. locFactory : ISDODataFactory;
  2322. locA : ISDODataObject;
  2323. locProp : ISDOProperty;
  2324. tfg : TTypeFlags;
  2325. begin
  2326. SetConstants();
  2327. tfg := [];
  2328. if is_open_type() then
  2329. Include(tfg,tfIsOpen);
  2330. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2331. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  2332. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_BYTES_1,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[]);
  2333. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_BYTES_1);
  2334. locProp.setDefault(TSDOBytes(VAL_1));
  2335. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  2336. locA.setBytes(locProp, VAL_2);
  2337. CheckEquals(True, locA.isSet(locProp), 'isSet');
  2338. CheckEquals(VAL_2, locA.getBytes(locProp), 'getBytes');
  2339. locA.unset(locProp);
  2340. CheckEquals(False, locA.isSet(locProp), 'isSet');
  2341. CheckEquals(VAL_1, locA.getBytes(locProp), 'getBytes');
  2342. end;
  2343. procedure TSDOBaseDataObject_Test.get_bytes_xpath();
  2344. const
  2345. LOCAL_PROP_TYPE = BytesType;
  2346. LOCAL_PROP_1_NAME = s_PROP_BYTES_1;
  2347. LOCAL_PROP_2_NAME = s_PROP_BYTES_2;
  2348. LOCAL_PROP_A_NAME = s_PROP_BYTES_A;
  2349. LOCAL_PROP_B_NAME = s_PROP_BYTES_B;
  2350. function local_create_factory() : ISDODataFactory;
  2351. var
  2352. res : ISDODataFactory;
  2353. tfg : TTypeFlags;
  2354. begin
  2355. tfg := [];
  2356. if is_open_type() then
  2357. Include(tfg,tfIsOpen);
  2358. res := TSDODataFactory.Create() as ISDODataFactory;
  2359. res.AddType(s_URI_1,s_TYPE_1,tfg);
  2360. res.AddType(s_URI_1,s_TYPE_2,tfg);
  2361. res.AddType(s_URI_1,s_TYPE_3,tfg);
  2362. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  2363. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  2364. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  2365. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  2366. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  2367. Result := res;
  2368. end;
  2369. var
  2370. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOBytes;
  2371. procedure SetConstants();
  2372. var
  2373. v : TSDOBytes;
  2374. k : Integer;
  2375. begin
  2376. SetLength(v,100);
  2377. for k := 0 to High(v) do
  2378. v[k] := k mod High(Byte);
  2379. o1_val_1 := v;
  2380. v := nil;
  2381. SetLength(v,200);
  2382. for k := 0 to High(v) do
  2383. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  2384. o1_val_2 := v;
  2385. o2_val_A := nil;
  2386. SetLength(v,200);
  2387. for k := 0 to High(v) do
  2388. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  2389. o2_val_B := v;
  2390. end;
  2391. var
  2392. locFac : ISDODataFactory;
  2393. o1, o2 : ISDODataObject;
  2394. begin
  2395. SetConstants();
  2396. locFac := local_create_factory();
  2397. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  2398. o1.setBytes(LOCAL_PROP_1_NAME,o1_val_1);
  2399. o1.setBytes(LOCAL_PROP_2_NAME,o1_val_2);
  2400. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  2401. o2.setBytes(LOCAL_PROP_A_NAME,o2_val_A);
  2402. o2.setBytes(LOCAL_PROP_B_NAME,o2_val_B);
  2403. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  2404. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  2405. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  2406. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  2407. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  2408. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  2409. end;
  2410. {$ENDIF HAS_SDO_BYTES}
  2411. {$IFDEF HAS_SDO_CHAR}
  2412. procedure TSDOBaseDataObject_Test.char_procs();
  2413. const
  2414. LOCAL_PROP_1 = s_PROP_CHAR_1;
  2415. LOCAL_PROP_2 = s_PROP_CHAR_2;
  2416. LOCAL_PROP_3 = s_PROP_CHAR_3;
  2417. VAL_1 : TSDOChar = 'W'; VAL_2 : TSDOChar = 's'; VAL_3 : TSDOChar = #0;
  2418. var
  2419. obj : ISDODataObject;
  2420. ok : Boolean;
  2421. begin
  2422. obj := Create_Object();
  2423. ok := False;
  2424. try
  2425. obj.setCharacter(obj.getProperty('qsdc'),VAL_1);
  2426. except
  2427. on e : ESDOPropertyNotFoundException do begin
  2428. ok := True;
  2429. end;
  2430. end;
  2431. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  2432. ok := False;
  2433. try
  2434. obj.getCharacter(obj.getProperty('qsdc'));
  2435. except
  2436. on e : ESDOPropertyNotFoundException do begin
  2437. ok := True;
  2438. end;
  2439. end;
  2440. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  2441. ok := False;
  2442. try
  2443. obj.setCharacter(obj.getProperty(LOCAL_PROP_3),VAL_1);
  2444. except
  2445. on e : ESDOIllegalArgumentException do begin
  2446. ok := True;
  2447. end;
  2448. end;
  2449. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  2450. obj.setCharacter(obj.getProperty(LOCAL_PROP_1),VAL_1);
  2451. CheckEquals(VAL_1,obj.getCharacter(obj.getProperty(LOCAL_PROP_1)));
  2452. CheckEquals(VAL_1,obj.getCharacter(LOCAL_PROP_1));
  2453. CheckEquals(VAL_1,obj.getCharacter(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2454. obj.setCharacter(obj.getProperty(LOCAL_PROP_1),VAL_2);
  2455. CheckEquals(VAL_2,obj.getCharacter(obj.getProperty(LOCAL_PROP_1)));
  2456. CheckEquals(VAL_2,obj.getCharacter(LOCAL_PROP_1));
  2457. CheckEquals(VAL_2,obj.getCharacter(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2458. obj.setCharacter(obj.getProperty(LOCAL_PROP_1),VAL_3);
  2459. CheckEquals(VAL_3,obj.getCharacter(obj.getProperty(LOCAL_PROP_1)));
  2460. CheckEquals(VAL_3,obj.getCharacter(LOCAL_PROP_1));
  2461. CheckEquals(VAL_3,obj.getCharacter(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2462. obj.setCharacter(obj.getProperty(LOCAL_PROP_2),VAL_1);
  2463. CheckEquals(VAL_1,obj.getCharacter(obj.getProperty(LOCAL_PROP_2)));
  2464. CheckEquals(VAL_1,obj.getCharacter(LOCAL_PROP_2));
  2465. CheckEquals(VAL_1,obj.getCharacter(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2466. obj.setCharacter(obj.getProperty(LOCAL_PROP_2),VAL_2);
  2467. CheckEquals(VAL_2,obj.getCharacter(obj.getProperty(LOCAL_PROP_2)));
  2468. CheckEquals(VAL_2,obj.getCharacter(LOCAL_PROP_2));
  2469. CheckEquals(VAL_2,obj.getCharacter(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2470. obj.setCharacter(obj.getProperty(LOCAL_PROP_2),VAL_3);
  2471. CheckEquals(VAL_3,obj.getCharacter(obj.getProperty(LOCAL_PROP_2)));
  2472. CheckEquals(VAL_3,obj.getCharacter(LOCAL_PROP_2));
  2473. CheckEquals(VAL_3,obj.getCharacter(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2474. end;
  2475. procedure TSDOBaseDataObject_Test.char_multivalue();
  2476. const LOCAL_PROP = s_PROP_CHAR_3; LOCAL_ARRAY_LEN = 100;
  2477. var
  2478. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDOChar;
  2479. procedure PrepareArray();
  2480. var
  2481. k : Integer;
  2482. begin
  2483. Randomize();
  2484. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2485. val_list[k] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  2486. end;
  2487. end;
  2488. var
  2489. obj : ISDODataObject;
  2490. ls, ls1 : ISDODataObjectList;
  2491. i : Integer;
  2492. crs : ILinkedListCursor;
  2493. ok : Boolean;
  2494. begin
  2495. PrepareArray();
  2496. obj := Create_Object();
  2497. ok := False;
  2498. try
  2499. ls := obj.getList(s_PROP_BOOL_1);
  2500. except
  2501. on e : ESDOIllegalArgumentException do begin
  2502. ok := True;
  2503. end;
  2504. end;
  2505. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  2506. ls := obj.getList(LOCAL_PROP);
  2507. Check(ls <> nil);
  2508. ls1 := obj.getList(LOCAL_PROP);
  2509. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  2510. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  2511. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  2512. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  2513. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  2514. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  2515. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  2516. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  2517. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  2518. CheckEquals(0,ls.size(),'Size');
  2519. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2520. ls.append(val_list[i]);
  2521. end;
  2522. crs := ls.getCursor();
  2523. Check(crs <> nil,'ls.getCursor()');
  2524. crs.Reset();
  2525. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  2526. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2527. crs.MoveNext();
  2528. CheckEquals(val_list[i],ls.getCharacter(),'append() <> getCharacter()');
  2529. end;
  2530. end;
  2531. procedure TSDOBaseDataObject_Test.char_unset_isset();
  2532. const
  2533. LOCAL_PROP = s_PROP_CHAR_1;
  2534. LOCAL_PROP_ARRAY = s_PROP_CHAR_3;
  2535. VAL_1 : TSDOChar = 'k'; VAL_2 : TSDOChar = 'x';
  2536. var
  2537. obj : ISDODataObject;
  2538. ls : ISDODataObjectList;
  2539. begin
  2540. obj := Create_Object();
  2541. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2542. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  2543. obj.setCharacter(LOCAL_PROP, VAL_1);
  2544. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2545. obj.unset(LOCAL_PROP);
  2546. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2547. CheckEquals(obj.getProperty(LOCAL_PROP).getCharacterDefault(),obj.getCharacter(LOCAL_PROP),'"unSet" should restore the default value');
  2548. obj.setCharacter(LOCAL_PROP, VAL_2);
  2549. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2550. obj.unset(LOCAL_PROP);
  2551. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2552. ls := obj.getList(LOCAL_PROP_ARRAY);
  2553. Check(ls <> nil);
  2554. CheckEquals(0,ls.size());
  2555. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  2556. ls.append(VAL_1);
  2557. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  2558. obj.unset(LOCAL_PROP_ARRAY);
  2559. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2560. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  2561. CheckEquals(0,ls.size());
  2562. ls.append(VAL_1);
  2563. ls.append(VAL_2);
  2564. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  2565. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2566. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  2567. CheckEquals(2,ls.size());
  2568. obj.unset(LOCAL_PROP_ARRAY);
  2569. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2570. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  2571. CheckEquals(0,ls.size());
  2572. end;
  2573. procedure TSDOBaseDataObject_Test.char_setnull_isnull();
  2574. const
  2575. LOCAL_PROP = s_PROP_CHAR_1;
  2576. LOCAL_PROP_ARRAY = s_PROP_CHAR_3;
  2577. VAL_1 : TSDOChar = 'z';
  2578. var
  2579. obj : ISDODataObject;
  2580. begin
  2581. obj := Create_Object();
  2582. // these _does_ depend on the property's default
  2583. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2584. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  2585. obj.setCharacter(LOCAL_PROP, VAL_1);
  2586. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2587. obj.setNull(LOCAL_PROP);
  2588. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2589. CheckEquals(#0,obj.getCharacter(LOCAL_PROP),LOCAL_PROP);
  2590. end;
  2591. procedure TSDOBaseDataObject_Test.property_default_value_char();
  2592. const
  2593. VAL_1 : TSDOChar = 'q';
  2594. var
  2595. locFactory : ISDODataFactory;
  2596. locA : ISDODataObject;
  2597. locProp : ISDOProperty;
  2598. tfg : TTypeFlags;
  2599. begin
  2600. tfg := [];
  2601. if is_open_type() then
  2602. Include(tfg,tfIsOpen);
  2603. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2604. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  2605. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_CHAR_1,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[]);
  2606. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_CHAR_1);
  2607. locProp.setDefault(VAL_1);
  2608. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  2609. CheckEquals(VAL_1, locA.getCharacter(locProp), 'getCharacter');
  2610. CheckEquals(False, locA.isSet(locProp), 'isSet');
  2611. end;
  2612. procedure TSDOBaseDataObject_Test.property_default_value_unset_char();
  2613. const
  2614. VAL_1 : TSDOChar = 'e'; VAL_2 : TSDOChar = 'r';
  2615. var
  2616. locFactory : ISDODataFactory;
  2617. locA : ISDODataObject;
  2618. locProp : ISDOProperty;
  2619. tfg : TTypeFlags;
  2620. begin
  2621. tfg := [];
  2622. if is_open_type() then
  2623. Include(tfg,tfIsOpen);
  2624. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2625. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  2626. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_CHAR_1,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[]);
  2627. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_CHAR_1);
  2628. locProp.setDefault(TSDOChar(VAL_1));
  2629. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  2630. locA.setCharacter(locProp, VAL_2);
  2631. CheckEquals(True, locA.isSet(locProp), 'isSet');
  2632. CheckEquals(VAL_2, locA.getCharacter(locProp), 'getCharacter');
  2633. locA.unset(locProp);
  2634. CheckEquals(False, locA.isSet(locProp), 'isSet');
  2635. CheckEquals(VAL_1, locA.getCharacter(locProp), 'getCharacter');
  2636. end;
  2637. {$ENDIF HAS_SDO_CHAR}
  2638. {$IFDEF HAS_SDO_CURRENCY}
  2639. procedure TSDOBaseDataObject_Test.currency_procs();
  2640. const
  2641. LOCAL_PROP_1 = s_PROP_CURRENCY_1;
  2642. LOCAL_PROP_2 = s_PROP_CURRENCY_2;
  2643. LOCAL_PROP_3 = s_PROP_CURRENCY_3;
  2644. VAL_1 : TSDOCurrency = 12345678.9101; VAL_2 : TSDOCurrency = -9879879.8765; VAL_3 : TSDOCurrency = 0;
  2645. var
  2646. obj : ISDODataObject;
  2647. ok : Boolean;
  2648. begin
  2649. obj := Create_Object();
  2650. ok := False;
  2651. try
  2652. obj.setCurrency(obj.getProperty('qsdc'),VAL_1);
  2653. except
  2654. on e : ESDOPropertyNotFoundException do begin
  2655. ok := True;
  2656. end;
  2657. end;
  2658. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  2659. ok := False;
  2660. try
  2661. obj.getCurrency(obj.getProperty('qsdc'));
  2662. except
  2663. on e : ESDOPropertyNotFoundException do begin
  2664. ok := True;
  2665. end;
  2666. end;
  2667. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  2668. ok := False;
  2669. try
  2670. obj.setCurrency(obj.getProperty(LOCAL_PROP_3),VAL_1);
  2671. except
  2672. on e : ESDOIllegalArgumentException do begin
  2673. ok := True;
  2674. end;
  2675. end;
  2676. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  2677. obj.setCurrency(obj.getProperty(LOCAL_PROP_1),VAL_1);
  2678. CheckEquals(VAL_1,obj.getCurrency(obj.getProperty(LOCAL_PROP_1)));
  2679. CheckEquals(VAL_1,obj.getCurrency(LOCAL_PROP_1));
  2680. CheckEquals(VAL_1,obj.getCurrency(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2681. obj.setCurrency(obj.getProperty(LOCAL_PROP_1),VAL_2);
  2682. CheckEquals(VAL_2,obj.getCurrency(obj.getProperty(LOCAL_PROP_1)));
  2683. CheckEquals(VAL_2,obj.getCurrency(LOCAL_PROP_1));
  2684. CheckEquals(VAL_2,obj.getCurrency(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2685. obj.setCurrency(obj.getProperty(LOCAL_PROP_1),VAL_3);
  2686. CheckEquals(VAL_3,obj.getCurrency(obj.getProperty(LOCAL_PROP_1)));
  2687. CheckEquals(VAL_3,obj.getCurrency(LOCAL_PROP_1));
  2688. CheckEquals(VAL_3,obj.getCurrency(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2689. obj.setCurrency(obj.getProperty(LOCAL_PROP_2),VAL_1);
  2690. CheckEquals(VAL_1,obj.getCurrency(obj.getProperty(LOCAL_PROP_2)));
  2691. CheckEquals(VAL_1,obj.getCurrency(LOCAL_PROP_2));
  2692. CheckEquals(VAL_1,obj.getCurrency(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2693. obj.setCurrency(obj.getProperty(LOCAL_PROP_2),VAL_2);
  2694. CheckEquals(VAL_2,obj.getCurrency(obj.getProperty(LOCAL_PROP_2)));
  2695. CheckEquals(VAL_2,obj.getCurrency(LOCAL_PROP_2));
  2696. CheckEquals(VAL_2,obj.getCurrency(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2697. obj.setCurrency(obj.getProperty(LOCAL_PROP_2),VAL_3);
  2698. CheckEquals(VAL_3,obj.getCurrency(obj.getProperty(LOCAL_PROP_2)));
  2699. CheckEquals(VAL_3,obj.getCurrency(LOCAL_PROP_2));
  2700. CheckEquals(VAL_3,obj.getCurrency(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2701. end;
  2702. procedure TSDOBaseDataObject_Test.currency_multivalue();
  2703. const LOCAL_PROP = s_PROP_CURRENCY_3; LOCAL_ARRAY_LEN = 100;
  2704. var
  2705. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDOCurrency;
  2706. procedure PrepareArray();
  2707. var
  2708. k : Integer;
  2709. begin
  2710. Randomize();
  2711. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2712. val_list[k] := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  2713. if ( ( k mod 3 ) = 0 ) then
  2714. val_list[k] := val_list[k] + High(TSDOInteger)
  2715. else if ( ( k mod 4 ) = 0 ) then
  2716. val_list[k] := val_list[k] - High(TSDOInteger)
  2717. end;
  2718. end;
  2719. var
  2720. obj : ISDODataObject;
  2721. ls, ls1 : ISDODataObjectList;
  2722. i : Integer;
  2723. crs : ILinkedListCursor;
  2724. ok : Boolean;
  2725. begin
  2726. PrepareArray();
  2727. obj := Create_Object();
  2728. ok := False;
  2729. try
  2730. ls := obj.getList(s_PROP_BOOL_1);
  2731. except
  2732. on e : ESDOIllegalArgumentException do begin
  2733. ok := True;
  2734. end;
  2735. end;
  2736. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  2737. ls := obj.getList(LOCAL_PROP);
  2738. Check(ls <> nil);
  2739. ls1 := obj.getList(LOCAL_PROP);
  2740. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  2741. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  2742. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  2743. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  2744. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  2745. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  2746. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  2747. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  2748. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  2749. CheckEquals(0,ls.size(),'Size');
  2750. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2751. ls.appendCurrency(val_list[i]);
  2752. end;
  2753. crs := ls.getCursor();
  2754. Check(crs <> nil,'ls.getCursor()');
  2755. crs.Reset();
  2756. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  2757. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2758. crs.MoveNext();
  2759. CheckEquals(val_list[i],ls.getCurrency(),'appendCurrency() <> getCurrency()');
  2760. end;
  2761. end;
  2762. procedure TSDOBaseDataObject_Test.currency_unset_isset();
  2763. const
  2764. LOCAL_PROP = s_PROP_CURRENCY_1;
  2765. LOCAL_PROP_ARRAY = s_PROP_CURRENCY_3;
  2766. VAL_1 : TSDOCurrency = 12345678.9101; VAL_2 : TSDOCurrency = -9879879.8765;
  2767. var
  2768. obj : ISDODataObject;
  2769. ls : ISDODataObjectList;
  2770. begin
  2771. obj := Create_Object();
  2772. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2773. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  2774. obj.setCurrency(LOCAL_PROP, VAL_1);
  2775. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2776. obj.unset(LOCAL_PROP);
  2777. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2778. CheckEquals(obj.getProperty(LOCAL_PROP).getCurrencyDefault(),obj.getCurrency(LOCAL_PROP),'"unSet" should restore the default value');
  2779. obj.setCurrency(LOCAL_PROP, VAL_2);
  2780. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2781. obj.unset(LOCAL_PROP);
  2782. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  2783. ls := obj.getList(LOCAL_PROP_ARRAY);
  2784. Check(ls <> nil);
  2785. CheckEquals(0,ls.size());
  2786. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  2787. ls.appendCurrency(VAL_1);
  2788. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  2789. obj.unset(LOCAL_PROP_ARRAY);
  2790. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2791. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  2792. CheckEquals(0,ls.size());
  2793. ls.appendCurrency(VAL_1);
  2794. ls.appendCurrency(VAL_2);
  2795. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  2796. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2797. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  2798. CheckEquals(2,ls.size());
  2799. obj.unset(LOCAL_PROP_ARRAY);
  2800. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  2801. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  2802. CheckEquals(0,ls.size());
  2803. end;
  2804. procedure TSDOBaseDataObject_Test.currency_setnull_isnull();
  2805. const
  2806. LOCAL_PROP = s_PROP_CURRENCY_1;
  2807. LOCAL_PROP_ARRAY = s_PROP_CURRENCY_3;
  2808. VAL_1 : TSDOCurrency = 8529637418529.6341;
  2809. var
  2810. obj : ISDODataObject;
  2811. begin
  2812. obj := Create_Object();
  2813. // these _does_ depend on the property's default
  2814. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2815. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  2816. obj.setCurrency(LOCAL_PROP, VAL_1);
  2817. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2818. obj.setNull(LOCAL_PROP);
  2819. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  2820. CheckEquals(0,obj.getCurrency(LOCAL_PROP),LOCAL_PROP);
  2821. end;
  2822. procedure TSDOBaseDataObject_Test.property_default_value_currency();
  2823. const
  2824. VAL_1 : TSDOCurrency = 987654321741.8563;
  2825. var
  2826. locFactory : ISDODataFactory;
  2827. locA : ISDODataObject;
  2828. locProp : ISDOProperty;
  2829. tfg : TTypeFlags;
  2830. begin
  2831. tfg := [];
  2832. if is_open_type() then
  2833. Include(tfg,tfIsOpen);
  2834. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2835. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  2836. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_CURRENCY_1,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[]);
  2837. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_CURRENCY_1);
  2838. locProp.setDefaultCurrency(VAL_1);
  2839. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  2840. CheckEqualsCurrency(VAL_1, locA.getCurrency(locProp), 'getCurrency');
  2841. CheckEquals(False, locA.isSet(locProp), 'isSet');
  2842. end;
  2843. procedure TSDOBaseDataObject_Test.property_default_value_unset_currency();
  2844. const
  2845. VAL_1 : TSDOCurrency = 7481592639867.5321; VAL_2 : TSDOCurrency = -193742865123.6574;
  2846. var
  2847. locFactory : ISDODataFactory;
  2848. locA : ISDODataObject;
  2849. locProp : ISDOProperty;
  2850. tfg : TTypeFlags;
  2851. begin
  2852. tfg := [];
  2853. if is_open_type() then
  2854. Include(tfg,tfIsOpen);
  2855. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  2856. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  2857. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_CURRENCY_1,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[]);
  2858. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_CURRENCY_1);
  2859. locProp.setDefaultCurrency(VAL_1);
  2860. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  2861. locA.setCurrency(locProp, VAL_2);
  2862. CheckEquals(True, locA.isSet(locProp), 'isSet');
  2863. CheckEqualsCurrency(VAL_2, locA.getCurrency(locProp), 'getCurrency');
  2864. locA.unset(locProp);
  2865. CheckEquals(False, locA.isSet(locProp), 'isSet');
  2866. CheckEqualsCurrency(VAL_1, locA.getCurrency(locProp), 'getCurrency');
  2867. end;
  2868. {$ENDIF HAS_SDO_CURRENCY}
  2869. {$IFDEF HAS_SDO_DOUBLE}
  2870. procedure TSDOBaseDataObject_Test.double_procs();
  2871. const
  2872. LOCAL_PROP_1 = s_PROP_DOUBLE_1;
  2873. LOCAL_PROP_2 = s_PROP_DOUBLE_2;
  2874. LOCAL_PROP_3 = s_PROP_DOUBLE_3;
  2875. VAL_1 : TSDODouble = 12345678.91011; VAL_2 : TSDODouble = -9879879.87654; VAL_3 : TSDODouble = 0;
  2876. var
  2877. obj : ISDODataObject;
  2878. ok : Boolean;
  2879. begin
  2880. obj := Create_Object();
  2881. ok := False;
  2882. try
  2883. obj.setDouble(obj.getProperty('qsdc'),VAL_1);
  2884. except
  2885. on e : ESDOPropertyNotFoundException do begin
  2886. ok := True;
  2887. end;
  2888. end;
  2889. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  2890. ok := False;
  2891. try
  2892. obj.getDouble(obj.getProperty('qsdc'));
  2893. except
  2894. on e : ESDOPropertyNotFoundException do begin
  2895. ok := True;
  2896. end;
  2897. end;
  2898. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  2899. ok := False;
  2900. try
  2901. obj.setDouble(obj.getProperty(LOCAL_PROP_3),VAL_1);
  2902. except
  2903. on e : ESDOIllegalArgumentException do begin
  2904. ok := True;
  2905. end;
  2906. end;
  2907. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  2908. obj.setDouble(obj.getProperty(LOCAL_PROP_1),VAL_1);
  2909. CheckEquals(VAL_1,obj.getDouble(obj.getProperty(LOCAL_PROP_1)));
  2910. CheckEquals(VAL_1,obj.getDouble(LOCAL_PROP_1));
  2911. CheckEquals(VAL_1,obj.getDouble(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2912. obj.setDouble(obj.getProperty(LOCAL_PROP_1),VAL_2);
  2913. CheckEquals(VAL_2,obj.getDouble(obj.getProperty(LOCAL_PROP_1)));
  2914. CheckEquals(VAL_2,obj.getDouble(LOCAL_PROP_1));
  2915. CheckEquals(VAL_2,obj.getDouble(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2916. obj.setDouble(obj.getProperty(LOCAL_PROP_1),VAL_3);
  2917. CheckEquals(VAL_3,obj.getDouble(obj.getProperty(LOCAL_PROP_1)));
  2918. CheckEquals(VAL_3,obj.getDouble(LOCAL_PROP_1));
  2919. CheckEquals(VAL_3,obj.getDouble(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  2920. obj.setDouble(obj.getProperty(LOCAL_PROP_2),VAL_1);
  2921. CheckEquals(VAL_1,obj.getDouble(obj.getProperty(LOCAL_PROP_2)));
  2922. CheckEquals(VAL_1,obj.getDouble(LOCAL_PROP_2));
  2923. CheckEquals(VAL_1,obj.getDouble(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2924. obj.setDouble(obj.getProperty(LOCAL_PROP_2),VAL_2);
  2925. CheckEquals(VAL_2,obj.getDouble(obj.getProperty(LOCAL_PROP_2)));
  2926. CheckEquals(VAL_2,obj.getDouble(LOCAL_PROP_2));
  2927. CheckEquals(VAL_2,obj.getDouble(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2928. obj.setDouble(obj.getProperty(LOCAL_PROP_2),VAL_3);
  2929. CheckEquals(VAL_3,obj.getDouble(obj.getProperty(LOCAL_PROP_2)));
  2930. CheckEquals(VAL_3,obj.getDouble(LOCAL_PROP_2));
  2931. CheckEquals(VAL_3,obj.getDouble(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  2932. end;
  2933. procedure TSDOBaseDataObject_Test.double_multivalue();
  2934. const LOCAL_PROP = s_PROP_DOUBLE_3; LOCAL_ARRAY_LEN = 100;
  2935. var
  2936. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDODouble;
  2937. procedure PrepareArray();
  2938. var
  2939. k : Integer;
  2940. begin
  2941. Randomize();
  2942. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2943. val_list[k] := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  2944. if ( ( k mod 3 ) = 0 ) then
  2945. val_list[k] := val_list[k] + High(TSDOInteger)
  2946. else if ( ( k mod 4 ) = 0 ) then
  2947. val_list[k] := val_list[k] - High(TSDOInteger)
  2948. end;
  2949. end;
  2950. var
  2951. obj : ISDODataObject;
  2952. ls, ls1 : ISDODataObjectList;
  2953. i : Integer;
  2954. crs : ILinkedListCursor;
  2955. ok : Boolean;
  2956. begin
  2957. PrepareArray();
  2958. obj := Create_Object();
  2959. ok := False;
  2960. try
  2961. ls := obj.getList(s_PROP_BOOL_1);
  2962. except
  2963. on e : ESDOIllegalArgumentException do begin
  2964. ok := True;
  2965. end;
  2966. end;
  2967. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  2968. ls := obj.getList(LOCAL_PROP);
  2969. Check(ls <> nil);
  2970. ls1 := obj.getList(LOCAL_PROP);
  2971. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  2972. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  2973. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  2974. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  2975. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  2976. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  2977. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  2978. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  2979. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  2980. CheckEquals(0,ls.size(),'Size');
  2981. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2982. ls.append(val_list[i]);
  2983. end;
  2984. crs := ls.getCursor();
  2985. Check(crs <> nil,'ls.getCursor()');
  2986. crs.Reset();
  2987. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  2988. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  2989. crs.MoveNext();
  2990. CheckEquals(val_list[i],ls.getDouble(),'append() <> getDouble()');
  2991. end;
  2992. end;
  2993. procedure TSDOBaseDataObject_Test.double_unset_isset();
  2994. const
  2995. LOCAL_PROP = s_PROP_DOUBLE_1;
  2996. LOCAL_PROP_ARRAY = s_PROP_DOUBLE_3;
  2997. VAL_1 : TSDODouble = 12345678.91011; VAL_2 : TSDODouble = -9879879.87654;
  2998. var
  2999. obj : ISDODataObject;
  3000. ls : ISDODataObjectList;
  3001. begin
  3002. obj := Create_Object();
  3003. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3004. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  3005. obj.setDouble(LOCAL_PROP, VAL_1);
  3006. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3007. obj.unset(LOCAL_PROP);
  3008. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3009. CheckEquals(obj.getProperty(LOCAL_PROP).getDoubleDefault(),obj.getDouble(LOCAL_PROP),'"unSet" should restore the default value');
  3010. obj.setDouble(LOCAL_PROP, VAL_2);
  3011. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3012. obj.unset(LOCAL_PROP);
  3013. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3014. ls := obj.getList(LOCAL_PROP_ARRAY);
  3015. Check(ls <> nil);
  3016. CheckEquals(0,ls.size());
  3017. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  3018. ls.append(VAL_1);
  3019. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  3020. obj.unset(LOCAL_PROP_ARRAY);
  3021. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3022. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  3023. CheckEquals(0,ls.size());
  3024. ls.append(VAL_1);
  3025. ls.append(VAL_2);
  3026. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  3027. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3028. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  3029. CheckEquals(2,ls.size());
  3030. obj.unset(LOCAL_PROP_ARRAY);
  3031. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3032. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  3033. CheckEquals(0,ls.size());
  3034. end;
  3035. procedure TSDOBaseDataObject_Test.double_setnull_isnull();
  3036. const
  3037. LOCAL_PROP = s_PROP_DOUBLE_1;
  3038. LOCAL_PROP_ARRAY = s_PROP_DOUBLE_3;
  3039. VAL_1 : TSDODouble = 8529637418529.63741;
  3040. var
  3041. obj : ISDODataObject;
  3042. begin
  3043. obj := Create_Object();
  3044. // these _does_ depend on the property's default
  3045. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3046. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  3047. obj.setDouble(LOCAL_PROP, VAL_1);
  3048. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3049. obj.setNull(LOCAL_PROP);
  3050. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3051. CheckEquals(0,obj.getDouble(LOCAL_PROP),LOCAL_PROP);
  3052. end;
  3053. procedure TSDOBaseDataObject_Test.property_default_value_double();
  3054. const
  3055. VAL_1 : TSDODouble = 987654321741.852963;
  3056. var
  3057. locFactory : ISDODataFactory;
  3058. locA : ISDODataObject;
  3059. locProp : ISDOProperty;
  3060. tfg : TTypeFlags;
  3061. begin
  3062. tfg := [];
  3063. if is_open_type() then
  3064. Include(tfg,tfIsOpen);
  3065. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3066. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  3067. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_DOUBLE_1,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[]);
  3068. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_DOUBLE_1);
  3069. locProp.setDefault(VAL_1);
  3070. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  3071. CheckEquals(VAL_1, locA.getDouble(locProp), 'getDouble');
  3072. CheckEquals(False, locA.isSet(locProp), 'isSet');
  3073. end;
  3074. procedure TSDOBaseDataObject_Test.property_default_value_unset_double();
  3075. const
  3076. VAL_1 : TSDODouble = 7481592639867.53421; VAL_2 : TSDODouble = -193742865123.6549874;
  3077. var
  3078. locFactory : ISDODataFactory;
  3079. locA : ISDODataObject;
  3080. locProp : ISDOProperty;
  3081. tfg : TTypeFlags;
  3082. begin
  3083. tfg := [];
  3084. if is_open_type() then
  3085. Include(tfg,tfIsOpen);
  3086. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3087. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  3088. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_DOUBLE_1,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[]);
  3089. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_DOUBLE_1);
  3090. locProp.setDefault(TSDODouble(VAL_1));
  3091. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  3092. locA.setDouble(locProp, VAL_2);
  3093. CheckEquals(True, locA.isSet(locProp), 'isSet');
  3094. CheckEquals(VAL_2, locA.getDouble(locProp), 'getDouble');
  3095. locA.unset(locProp);
  3096. CheckEquals(False, locA.isSet(locProp), 'isSet');
  3097. CheckEquals(VAL_1, locA.getDouble(locProp), 'getDouble');
  3098. end;
  3099. {$ENDIF HAS_SDO_DOUBLE}
  3100. {$IFDEF HAS_SDO_FLOAT}
  3101. procedure TSDOBaseDataObject_Test.float_procs();
  3102. const
  3103. LOCAL_PROP_1 = s_PROP_FLOAT_1;
  3104. LOCAL_PROP_2 = s_PROP_FLOAT_2;
  3105. LOCAL_PROP_3 = s_PROP_FLOAT_3;
  3106. VAL_1 : TSDOFloat = 12345678.91011; VAL_2 : TSDOFloat = -9879879.87654; VAL_3 : TSDOFloat = 0;
  3107. var
  3108. obj : ISDODataObject;
  3109. ok : Boolean;
  3110. begin
  3111. obj := Create_Object();
  3112. ok := False;
  3113. try
  3114. obj.setFloat(obj.getProperty('qsdc'),VAL_1);
  3115. except
  3116. on e : ESDOPropertyNotFoundException do begin
  3117. ok := True;
  3118. end;
  3119. end;
  3120. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  3121. ok := False;
  3122. try
  3123. obj.getFloat(obj.getProperty('qsdc'));
  3124. except
  3125. on e : ESDOPropertyNotFoundException do begin
  3126. ok := True;
  3127. end;
  3128. end;
  3129. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  3130. ok := False;
  3131. try
  3132. obj.setFloat(obj.getProperty(LOCAL_PROP_3),VAL_1);
  3133. except
  3134. on e : ESDOIllegalArgumentException do begin
  3135. ok := True;
  3136. end;
  3137. end;
  3138. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  3139. obj.setFloat(obj.getProperty(LOCAL_PROP_1),VAL_1);
  3140. CheckEquals(VAL_1,obj.getFloat(obj.getProperty(LOCAL_PROP_1)));
  3141. CheckEquals(VAL_1,obj.getFloat(LOCAL_PROP_1));
  3142. CheckEquals(VAL_1,obj.getFloat(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3143. obj.setFloat(obj.getProperty(LOCAL_PROP_1),VAL_2);
  3144. CheckEquals(VAL_2,obj.getFloat(obj.getProperty(LOCAL_PROP_1)));
  3145. CheckEquals(VAL_2,obj.getFloat(LOCAL_PROP_1));
  3146. CheckEquals(VAL_2,obj.getFloat(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3147. obj.setFloat(obj.getProperty(LOCAL_PROP_1),VAL_3);
  3148. CheckEquals(VAL_3,obj.getFloat(obj.getProperty(LOCAL_PROP_1)));
  3149. CheckEquals(VAL_3,obj.getFloat(LOCAL_PROP_1));
  3150. CheckEquals(VAL_3,obj.getFloat(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3151. obj.setFloat(obj.getProperty(LOCAL_PROP_2),VAL_1);
  3152. CheckEquals(VAL_1,obj.getFloat(obj.getProperty(LOCAL_PROP_2)));
  3153. CheckEquals(VAL_1,obj.getFloat(LOCAL_PROP_2));
  3154. CheckEquals(VAL_1,obj.getFloat(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3155. obj.setFloat(obj.getProperty(LOCAL_PROP_2),VAL_2);
  3156. CheckEquals(VAL_2,obj.getFloat(obj.getProperty(LOCAL_PROP_2)));
  3157. CheckEquals(VAL_2,obj.getFloat(LOCAL_PROP_2));
  3158. CheckEquals(VAL_2,obj.getFloat(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3159. obj.setFloat(obj.getProperty(LOCAL_PROP_2),VAL_3);
  3160. CheckEquals(VAL_3,obj.getFloat(obj.getProperty(LOCAL_PROP_2)));
  3161. CheckEquals(VAL_3,obj.getFloat(LOCAL_PROP_2));
  3162. CheckEquals(VAL_3,obj.getFloat(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3163. end;
  3164. procedure TSDOBaseDataObject_Test.float_multivalue();
  3165. const LOCAL_PROP = s_PROP_FLOAT_3; LOCAL_ARRAY_LEN = 100;
  3166. var
  3167. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDOFloat;
  3168. procedure PrepareArray();
  3169. var
  3170. k : Integer;
  3171. begin
  3172. Randomize();
  3173. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3174. val_list[k] := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  3175. if ( ( k mod 3 ) = 0 ) then
  3176. val_list[k] := val_list[k] + High(TSDOInteger)
  3177. else if ( ( k mod 4 ) = 0 ) then
  3178. val_list[k] := val_list[k] - High(TSDOInteger)
  3179. end;
  3180. end;
  3181. var
  3182. obj : ISDODataObject;
  3183. ls, ls1 : ISDODataObjectList;
  3184. i : Integer;
  3185. crs : ILinkedListCursor;
  3186. ok : Boolean;
  3187. begin
  3188. PrepareArray();
  3189. obj := Create_Object();
  3190. ok := False;
  3191. try
  3192. ls := obj.getList(s_PROP_BOOL_1);
  3193. except
  3194. on e : ESDOIllegalArgumentException do begin
  3195. ok := True;
  3196. end;
  3197. end;
  3198. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  3199. ls := obj.getList(LOCAL_PROP);
  3200. Check(ls <> nil);
  3201. ls1 := obj.getList(LOCAL_PROP);
  3202. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  3203. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  3204. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  3205. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  3206. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  3207. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  3208. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  3209. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  3210. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  3211. CheckEquals(0,ls.size(),'Size');
  3212. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3213. ls.append(val_list[i]);
  3214. end;
  3215. crs := ls.getCursor();
  3216. Check(crs <> nil,'ls.getCursor()');
  3217. crs.Reset();
  3218. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  3219. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3220. crs.MoveNext();
  3221. CheckEquals(val_list[i],ls.getFloat(),'append() <> getFloat()');
  3222. end;
  3223. end;
  3224. procedure TSDOBaseDataObject_Test.float_unset_isset();
  3225. const
  3226. LOCAL_PROP = s_PROP_FLOAT_1;
  3227. LOCAL_PROP_ARRAY = s_PROP_FLOAT_3;
  3228. VAL_1 : TSDOFloat = 12345678.91011; VAL_2 : TSDOFloat = -9879879.87654;
  3229. var
  3230. obj : ISDODataObject;
  3231. ls : ISDODataObjectList;
  3232. begin
  3233. obj := Create_Object();
  3234. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3235. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  3236. obj.setFloat(LOCAL_PROP, VAL_1);
  3237. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3238. obj.unset(LOCAL_PROP);
  3239. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3240. CheckEquals(obj.getProperty(LOCAL_PROP).getFloatDefault(),obj.getFloat(LOCAL_PROP),'"unSet" should restore the default value');
  3241. obj.setFloat(LOCAL_PROP, VAL_2);
  3242. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3243. obj.unset(LOCAL_PROP);
  3244. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3245. ls := obj.getList(LOCAL_PROP_ARRAY);
  3246. Check(ls <> nil);
  3247. CheckEquals(0,ls.size());
  3248. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  3249. ls.append(VAL_1);
  3250. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  3251. obj.unset(LOCAL_PROP_ARRAY);
  3252. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3253. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  3254. CheckEquals(0,ls.size());
  3255. ls.append(VAL_1);
  3256. ls.append(VAL_2);
  3257. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  3258. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3259. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  3260. CheckEquals(2,ls.size());
  3261. obj.unset(LOCAL_PROP_ARRAY);
  3262. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3263. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  3264. CheckEquals(0,ls.size());
  3265. end;
  3266. procedure TSDOBaseDataObject_Test.float_setnull_isnull();
  3267. const
  3268. LOCAL_PROP = s_PROP_FLOAT_1;
  3269. LOCAL_PROP_ARRAY = s_PROP_FLOAT_3;
  3270. VAL_1 : TSDOFloat = 8529637418529.63741;
  3271. var
  3272. obj : ISDODataObject;
  3273. begin
  3274. obj := Create_Object();
  3275. // these _does_ depend on the property's default
  3276. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3277. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  3278. obj.setFloat(LOCAL_PROP, VAL_1);
  3279. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3280. obj.setNull(LOCAL_PROP);
  3281. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3282. CheckEquals(0,obj.getFloat(LOCAL_PROP),LOCAL_PROP);
  3283. end;
  3284. procedure TSDOBaseDataObject_Test.property_default_value_float();
  3285. const
  3286. VAL_1 : TSDOFloat = 987654321741.852963;
  3287. var
  3288. locFactory : ISDODataFactory;
  3289. locA : ISDODataObject;
  3290. locProp : ISDOProperty;
  3291. tfg : TTypeFlags;
  3292. begin
  3293. tfg := [];
  3294. if is_open_type() then
  3295. Include(tfg,tfIsOpen);
  3296. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3297. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  3298. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_FLOAT_1,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[]);
  3299. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_FLOAT_1);
  3300. locProp.setDefault(VAL_1);
  3301. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  3302. CheckEquals(VAL_1, locA.getFloat(locProp), 'getFloat');
  3303. CheckEquals(False, locA.isSet(locProp), 'isSet');
  3304. end;
  3305. procedure TSDOBaseDataObject_Test.property_default_value_unset_float();
  3306. const
  3307. VAL_1 : TSDOFloat = 7481592639867.53421; VAL_2 : TSDOFloat = -193742865123.6549874;
  3308. var
  3309. locFactory : ISDODataFactory;
  3310. locA : ISDODataObject;
  3311. locProp : ISDOProperty;
  3312. tfg : TTypeFlags;
  3313. begin
  3314. tfg := [];
  3315. if is_open_type() then
  3316. Include(tfg,tfIsOpen);
  3317. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3318. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  3319. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_FLOAT_1,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[]);
  3320. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_FLOAT_1);
  3321. locProp.setDefault(TSDOFloat(VAL_1));
  3322. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  3323. locA.setFloat(locProp, VAL_2);
  3324. CheckEquals(True, locA.isSet(locProp), 'isSet');
  3325. CheckEquals(VAL_2, locA.getFloat(locProp), 'getFloat');
  3326. locA.unset(locProp);
  3327. CheckEquals(False, locA.isSet(locProp), 'isSet');
  3328. CheckEquals(VAL_1, locA.getFloat(locProp), 'getFloat');
  3329. end;
  3330. {$ENDIF HAS_SDO_FLOAT}
  3331. {$IFDEF HAS_SDO_LONG}
  3332. procedure TSDOBaseDataObject_Test.long_procs();
  3333. const
  3334. LOCAL_PROP_1 = s_PROP_LONG_1;
  3335. LOCAL_PROP_2 = s_PROP_LONG_2;
  3336. LOCAL_PROP_3 = s_PROP_LONG_3;
  3337. VAL_1 : TSDOLong = 1234567891011; VAL_2 : TSDOLong = -987987987654; VAL_3 : TSDOLong = 0;
  3338. var
  3339. obj : ISDODataObject;
  3340. ok : Boolean;
  3341. begin
  3342. obj := Create_Object();
  3343. ok := False;
  3344. try
  3345. obj.setLong(obj.getProperty('qsdc'),VAL_1);
  3346. except
  3347. on e : ESDOPropertyNotFoundException do begin
  3348. ok := True;
  3349. end;
  3350. end;
  3351. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  3352. ok := False;
  3353. try
  3354. obj.getLong(obj.getProperty('qsdc'));
  3355. except
  3356. on e : ESDOPropertyNotFoundException do begin
  3357. ok := True;
  3358. end;
  3359. end;
  3360. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  3361. ok := False;
  3362. try
  3363. obj.setLong(obj.getProperty(LOCAL_PROP_3),VAL_1);
  3364. except
  3365. on e : ESDOIllegalArgumentException do begin
  3366. ok := True;
  3367. end;
  3368. end;
  3369. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  3370. obj.setLong(obj.getProperty(LOCAL_PROP_1),VAL_1);
  3371. CheckEquals(VAL_1,obj.getLong(obj.getProperty(LOCAL_PROP_1)));
  3372. CheckEquals(VAL_1,obj.getLong(LOCAL_PROP_1));
  3373. CheckEquals(VAL_1,obj.getLong(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3374. obj.setLong(obj.getProperty(LOCAL_PROP_1),VAL_2);
  3375. CheckEquals(VAL_2,obj.getLong(obj.getProperty(LOCAL_PROP_1)));
  3376. CheckEquals(VAL_2,obj.getLong(LOCAL_PROP_1));
  3377. CheckEquals(VAL_2,obj.getLong(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3378. obj.setLong(obj.getProperty(LOCAL_PROP_1),VAL_3);
  3379. CheckEquals(VAL_3,obj.getLong(obj.getProperty(LOCAL_PROP_1)));
  3380. CheckEquals(VAL_3,obj.getLong(LOCAL_PROP_1));
  3381. CheckEquals(VAL_3,obj.getLong(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3382. obj.setLong(obj.getProperty(LOCAL_PROP_2),VAL_1);
  3383. CheckEquals(VAL_1,obj.getLong(obj.getProperty(LOCAL_PROP_2)));
  3384. CheckEquals(VAL_1,obj.getLong(LOCAL_PROP_2));
  3385. CheckEquals(VAL_1,obj.getLong(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3386. obj.setLong(obj.getProperty(LOCAL_PROP_2),VAL_2);
  3387. CheckEquals(VAL_2,obj.getLong(obj.getProperty(LOCAL_PROP_2)));
  3388. CheckEquals(VAL_2,obj.getLong(LOCAL_PROP_2));
  3389. CheckEquals(VAL_2,obj.getLong(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3390. obj.setLong(obj.getProperty(LOCAL_PROP_2),VAL_3);
  3391. CheckEquals(VAL_3,obj.getLong(obj.getProperty(LOCAL_PROP_2)));
  3392. CheckEquals(VAL_3,obj.getLong(LOCAL_PROP_2));
  3393. CheckEquals(VAL_3,obj.getLong(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3394. end;
  3395. procedure TSDOBaseDataObject_Test.long_multivalue();
  3396. const LOCAL_PROP = s_PROP_LONG_3; LOCAL_ARRAY_LEN = 100;
  3397. var
  3398. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDOLong;
  3399. procedure PrepareArray();
  3400. var
  3401. k : Integer;
  3402. begin
  3403. Randomize();
  3404. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3405. val_list[k] := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  3406. if ( ( k mod 3 ) = 0 ) then
  3407. val_list[k] := val_list[k] + High(TSDOInteger)
  3408. else if ( ( k mod 4 ) = 0 ) then
  3409. val_list[k] := val_list[k] - High(TSDOInteger)
  3410. end;
  3411. end;
  3412. var
  3413. obj : ISDODataObject;
  3414. ls, ls1 : ISDODataObjectList;
  3415. i : Integer;
  3416. crs : ILinkedListCursor;
  3417. ok : Boolean;
  3418. begin
  3419. PrepareArray();
  3420. obj := Create_Object();
  3421. ok := False;
  3422. try
  3423. ls := obj.getList(s_PROP_BOOL_1);
  3424. except
  3425. on e : ESDOIllegalArgumentException do begin
  3426. ok := True;
  3427. end;
  3428. end;
  3429. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  3430. ls := obj.getList(LOCAL_PROP);
  3431. Check(ls <> nil);
  3432. ls1 := obj.getList(LOCAL_PROP);
  3433. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  3434. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  3435. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  3436. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  3437. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  3438. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  3439. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  3440. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  3441. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  3442. CheckEquals(0,ls.size(),'Size');
  3443. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3444. ls.append(val_list[i]);
  3445. end;
  3446. crs := ls.getCursor();
  3447. Check(crs <> nil,'ls.getCursor()');
  3448. crs.Reset();
  3449. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  3450. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3451. crs.MoveNext();
  3452. CheckEquals(val_list[i],ls.getLong(),'append() <> getLong()');
  3453. end;
  3454. end;
  3455. procedure TSDOBaseDataObject_Test.long_unset_isset();
  3456. const
  3457. LOCAL_PROP = s_PROP_LONG_1;
  3458. LOCAL_PROP_ARRAY = s_PROP_LONG_3;
  3459. VAL_1 : TSDOLong = 123456789125525; VAL_2 : TSDOLong = -123987321654987;
  3460. var
  3461. obj : ISDODataObject;
  3462. ls : ISDODataObjectList;
  3463. begin
  3464. obj := Create_Object();
  3465. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3466. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  3467. obj.setLong(LOCAL_PROP, VAL_1);
  3468. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3469. obj.unset(LOCAL_PROP);
  3470. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3471. CheckEquals(obj.getProperty(LOCAL_PROP).getLongDefault(),obj.getLong(LOCAL_PROP),'"unSet" should restore the default value');
  3472. obj.setLong(LOCAL_PROP, VAL_2);
  3473. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3474. obj.unset(LOCAL_PROP);
  3475. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3476. ls := obj.getList(LOCAL_PROP_ARRAY);
  3477. Check(ls <> nil);
  3478. CheckEquals(0,ls.size());
  3479. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  3480. ls.append(VAL_1);
  3481. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  3482. obj.unset(LOCAL_PROP_ARRAY);
  3483. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3484. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  3485. CheckEquals(0,ls.size());
  3486. ls.append(VAL_1);
  3487. ls.append(VAL_2);
  3488. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  3489. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3490. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  3491. CheckEquals(2,ls.size());
  3492. obj.unset(LOCAL_PROP_ARRAY);
  3493. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3494. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  3495. CheckEquals(0,ls.size());
  3496. end;
  3497. procedure TSDOBaseDataObject_Test.long_setnull_isnull();
  3498. const
  3499. LOCAL_PROP = s_PROP_LONG_1;
  3500. LOCAL_PROP_ARRAY = s_PROP_LONG_3;
  3501. VAL_1 : TSDOLong = 852963741852963741;
  3502. var
  3503. obj : ISDODataObject;
  3504. begin
  3505. obj := Create_Object();
  3506. // these _does_ depend on the property's default
  3507. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3508. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  3509. obj.setLong(LOCAL_PROP, VAL_1);
  3510. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3511. obj.setNull(LOCAL_PROP);
  3512. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3513. CheckEquals(0,obj.getLong(LOCAL_PROP),LOCAL_PROP);
  3514. end;
  3515. procedure TSDOBaseDataObject_Test.property_default_value_long();
  3516. const
  3517. VAL_1 : TSDOLong = 987654321741852963;
  3518. var
  3519. locFactory : ISDODataFactory;
  3520. locA : ISDODataObject;
  3521. locProp : ISDOProperty;
  3522. tfg : TTypeFlags;
  3523. begin
  3524. tfg := [];
  3525. if is_open_type() then
  3526. Include(tfg,tfIsOpen);
  3527. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3528. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  3529. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_LONG_1,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[]);
  3530. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_LONG_1);
  3531. locProp.setDefault(VAL_1);
  3532. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  3533. CheckEquals(VAL_1, locA.getLong(locProp), 'getLong');
  3534. CheckEquals(False, locA.isSet(locProp), 'isSet');
  3535. end;
  3536. procedure TSDOBaseDataObject_Test.property_default_value_unset_long();
  3537. const
  3538. VAL_1 : TSDOLong = 748159263986753421; VAL_2 : TSDOLong = -1937428651236549874;
  3539. var
  3540. locFactory : ISDODataFactory;
  3541. locA : ISDODataObject;
  3542. locProp : ISDOProperty;
  3543. tfg : TTypeFlags;
  3544. begin
  3545. tfg := [];
  3546. if is_open_type() then
  3547. Include(tfg,tfIsOpen);
  3548. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3549. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  3550. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_LONG_1,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[]);
  3551. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_LONG_1);
  3552. locProp.setDefault(TSDOLong(VAL_1));
  3553. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  3554. locA.setLong(locProp, VAL_2);
  3555. CheckEquals(True, locA.isSet(locProp), 'isSet');
  3556. CheckEquals(VAL_2, locA.getLong(locProp), 'getLong');
  3557. locA.unset(locProp);
  3558. CheckEquals(False, locA.isSet(locProp), 'isSet');
  3559. CheckEquals(VAL_1, locA.getLong(locProp), 'getLong');
  3560. end;
  3561. {$ENDIF HAS_SDO_LONG}
  3562. {$IFDEF HAS_SDO_SHORT}
  3563. procedure TSDOBaseDataObject_Test.short_procs();
  3564. const
  3565. LOCAL_PROP_1 = s_PROP_SHORT_1;
  3566. LOCAL_PROP_2 = s_PROP_SHORT_2;
  3567. LOCAL_PROP_3 = s_PROP_SHORT_3;
  3568. VAL_1 : TSDOShort = 4567; VAL_2 : TSDOShort = -9856; VAL_3 : TSDOShort = 0;
  3569. var
  3570. obj : ISDODataObject;
  3571. ok : Boolean;
  3572. begin
  3573. obj := Create_Object();
  3574. ok := False;
  3575. try
  3576. obj.setShort(obj.getProperty('qsdc'),VAL_1);
  3577. except
  3578. on e : ESDOPropertyNotFoundException do begin
  3579. ok := True;
  3580. end;
  3581. end;
  3582. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  3583. ok := False;
  3584. try
  3585. obj.getShort(obj.getProperty('qsdc'));
  3586. except
  3587. on e : ESDOPropertyNotFoundException do begin
  3588. ok := True;
  3589. end;
  3590. end;
  3591. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  3592. ok := False;
  3593. try
  3594. obj.setShort(obj.getProperty(LOCAL_PROP_3),VAL_1);
  3595. except
  3596. on e : ESDOIllegalArgumentException do begin
  3597. ok := True;
  3598. end;
  3599. end;
  3600. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  3601. obj.setShort(obj.getProperty(LOCAL_PROP_1),VAL_1);
  3602. CheckEquals(VAL_1,obj.getShort(obj.getProperty(LOCAL_PROP_1)));
  3603. CheckEquals(VAL_1,obj.getShort(LOCAL_PROP_1));
  3604. CheckEquals(VAL_1,obj.getShort(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3605. obj.setShort(obj.getProperty(LOCAL_PROP_1),VAL_2);
  3606. CheckEquals(VAL_2,obj.getShort(obj.getProperty(LOCAL_PROP_1)));
  3607. CheckEquals(VAL_2,obj.getShort(LOCAL_PROP_1));
  3608. CheckEquals(VAL_2,obj.getShort(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3609. obj.setShort(obj.getProperty(LOCAL_PROP_1),VAL_3);
  3610. CheckEquals(VAL_3,obj.getShort(obj.getProperty(LOCAL_PROP_1)));
  3611. CheckEquals(VAL_3,obj.getShort(LOCAL_PROP_1));
  3612. CheckEquals(VAL_3,obj.getShort(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_1))));
  3613. obj.setShort(obj.getProperty(LOCAL_PROP_2),VAL_1);
  3614. CheckEquals(VAL_1,obj.getShort(obj.getProperty(LOCAL_PROP_2)));
  3615. CheckEquals(VAL_1,obj.getShort(LOCAL_PROP_2));
  3616. CheckEquals(VAL_1,obj.getShort(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3617. obj.setShort(obj.getProperty(LOCAL_PROP_2),VAL_2);
  3618. CheckEquals(VAL_2,obj.getShort(obj.getProperty(LOCAL_PROP_2)));
  3619. CheckEquals(VAL_2,obj.getShort(LOCAL_PROP_2));
  3620. CheckEquals(VAL_2,obj.getShort(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3621. obj.setShort(obj.getProperty(LOCAL_PROP_2),VAL_3);
  3622. CheckEquals(VAL_3,obj.getShort(obj.getProperty(LOCAL_PROP_2)));
  3623. CheckEquals(VAL_3,obj.getShort(LOCAL_PROP_2));
  3624. CheckEquals(VAL_3,obj.getShort(obj.getPropertyIndex(obj.getProperty(LOCAL_PROP_2))));
  3625. end;
  3626. procedure TSDOBaseDataObject_Test.short_multivalue();
  3627. const LOCAL_PROP = s_PROP_SHORT_3; LOCAL_ARRAY_LEN = 100;
  3628. var
  3629. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDOShort;
  3630. procedure PrepareArray();
  3631. var
  3632. k : Integer;
  3633. begin
  3634. Randomize();
  3635. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3636. val_list[k] := RandomRange(Low(TSDOShort),High(TSDOShort));
  3637. end;
  3638. end;
  3639. var
  3640. obj : ISDODataObject;
  3641. ls, ls1 : ISDODataObjectList;
  3642. i : Integer;
  3643. crs : ILinkedListCursor;
  3644. ok : Boolean;
  3645. begin
  3646. PrepareArray();
  3647. obj := Create_Object();
  3648. ok := False;
  3649. try
  3650. ls := obj.getList(s_PROP_BOOL_1);
  3651. except
  3652. on e : ESDOIllegalArgumentException do begin
  3653. ok := True;
  3654. end;
  3655. end;
  3656. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_BOOL_1]));
  3657. ls := obj.getList(LOCAL_PROP);
  3658. Check(ls <> nil);
  3659. ls1 := obj.getList(LOCAL_PROP);
  3660. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  3661. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  3662. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  3663. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  3664. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  3665. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  3666. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  3667. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  3668. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  3669. CheckEquals(0,ls.size(),'Size');
  3670. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3671. ls.append(val_list[i]);
  3672. end;
  3673. crs := ls.getCursor();
  3674. Check(crs <> nil,'ls.getCursor()');
  3675. crs.Reset();
  3676. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  3677. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  3678. crs.MoveNext();
  3679. CheckEquals(val_list[i],ls.getShort(),'append() <> getShort()');
  3680. end;
  3681. end;
  3682. procedure TSDOBaseDataObject_Test.short_unset_isset();
  3683. const
  3684. LOCAL_PROP = s_PROP_SHORT_1;
  3685. LOCAL_PROP_ARRAY = s_PROP_SHORT_3;
  3686. VAL_1 : TSDOShort = 789; VAL_2 : TSDOShort = -654;
  3687. var
  3688. obj : ISDODataObject;
  3689. ls : ISDODataObjectList;
  3690. begin
  3691. obj := Create_Object();
  3692. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3693. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  3694. obj.setShort(LOCAL_PROP, VAL_1);
  3695. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3696. obj.unset(LOCAL_PROP);
  3697. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3698. CheckEquals(obj.getProperty(LOCAL_PROP).getShortDefault(),obj.getShort(LOCAL_PROP),'"unSet" should restore the default value');
  3699. obj.setShort(LOCAL_PROP, VAL_2);
  3700. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3701. obj.unset(LOCAL_PROP);
  3702. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  3703. ls := obj.getList(LOCAL_PROP_ARRAY);
  3704. Check(ls <> nil);
  3705. CheckEquals(0,ls.size());
  3706. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  3707. ls.append(VAL_1);
  3708. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  3709. obj.unset(LOCAL_PROP_ARRAY);
  3710. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3711. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  3712. CheckEquals(0,ls.size());
  3713. ls.append(VAL_1);
  3714. ls.append(VAL_2);
  3715. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  3716. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3717. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  3718. CheckEquals(2,ls.size());
  3719. obj.unset(LOCAL_PROP_ARRAY);
  3720. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  3721. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  3722. CheckEquals(0,ls.size());
  3723. end;
  3724. procedure TSDOBaseDataObject_Test.short_setnull_isnull();
  3725. const
  3726. LOCAL_PROP = s_PROP_SHORT_1;
  3727. LOCAL_PROP_ARRAY = s_PROP_SHORT_3;
  3728. VAL_1 : TSDOShort = 1597;
  3729. var
  3730. obj : ISDODataObject;
  3731. begin
  3732. obj := Create_Object();
  3733. // these _does_ depend on the property's default
  3734. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3735. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  3736. obj.setShort(LOCAL_PROP, VAL_1);
  3737. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3738. obj.setNull(LOCAL_PROP);
  3739. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  3740. CheckEquals(0,obj.getShort(LOCAL_PROP),LOCAL_PROP);
  3741. end;
  3742. procedure TSDOBaseDataObject_Test.property_default_value_short();
  3743. const
  3744. VAL_1 : TSDOShort = 6547;
  3745. var
  3746. locFactory : ISDODataFactory;
  3747. locA : ISDODataObject;
  3748. locProp : ISDOProperty;
  3749. tfg : TTypeFlags;
  3750. begin
  3751. tfg := [];
  3752. if is_open_type() then
  3753. Include(tfg,tfIsOpen);
  3754. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3755. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  3756. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_SHORT_1,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[]);
  3757. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_SHORT_1);
  3758. locProp.setDefault(VAL_1);
  3759. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  3760. CheckEquals(VAL_1, locA.getShort(locProp), 'getShort');
  3761. CheckEquals(False, locA.isSet(locProp), 'isSet');
  3762. end;
  3763. procedure TSDOBaseDataObject_Test.property_default_value_unset_short();
  3764. const
  3765. VAL_1 : TSDOShort = 20123; VAL_2 : TSDOShort = -5648;
  3766. var
  3767. locFactory : ISDODataFactory;
  3768. locA : ISDODataObject;
  3769. locProp : ISDOProperty;
  3770. tfg : TTypeFlags;
  3771. begin
  3772. tfg := [];
  3773. if is_open_type() then
  3774. Include(tfg,tfIsOpen);
  3775. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  3776. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  3777. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_SHORT_1,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[]);
  3778. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_SHORT_1);
  3779. locProp.setDefault(TSDOShort(VAL_1));
  3780. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  3781. locA.setShort(locProp, VAL_2);
  3782. CheckEquals(True, locA.isSet(locProp), 'isSet');
  3783. CheckEquals(VAL_2, locA.getShort(locProp), 'getShort');
  3784. locA.unset(locProp);
  3785. CheckEquals(False, locA.isSet(locProp), 'isSet');
  3786. CheckEquals(VAL_1, locA.getShort(locProp), 'getShort');
  3787. end;
  3788. {$ENDIF HAS_SDO_SHORT}
  3789. {$IFDEF HAS_SDO_BYTES}
  3790. procedure TSDOBaseDataObject_Test.check_xpath_value(
  3791. const AExpected: TSDOBytes;
  3792. const AObject: ISDODataObject;
  3793. const AXPath: string
  3794. );
  3795. begin
  3796. CheckEquals(AExpected,AObject.getBytes(AXPath), AXPath);
  3797. end;
  3798. {$ENDIF HAS_SDO_BYTES}
  3799. {$IFDEF HAS_SDO_CHAR}
  3800. procedure TSDOBaseDataObject_Test.check_xpath_value(
  3801. const AExpected: TSDOChar;
  3802. const AObject: ISDODataObject;
  3803. const AXPath: string
  3804. );
  3805. begin
  3806. CheckEquals(AExpected,AObject.getCharacter(AXPath), AXPath);
  3807. end;
  3808. {$ENDIF HAS_SDO_CHAR}
  3809. {$IFDEF HAS_SDO_CURRENCY}
  3810. procedure TSDOBaseDataObject_Test.check_xpath_value_currency(
  3811. const AExpected: TSDOCurrency;
  3812. const AObject: ISDODataObject;
  3813. const AXPath: string
  3814. );
  3815. begin
  3816. CheckEqualsCurrency(AExpected,AObject.getCurrency(AXPath), 0.0001, AXPath);
  3817. end;
  3818. {$ENDIF HAS_SDO_CURRENCY}
  3819. {$IFDEF HAS_SDO_DOUBLE}
  3820. procedure TSDOBaseDataObject_Test.check_xpath_value(
  3821. const AExpected: TSDODouble;
  3822. const AObject: ISDODataObject;
  3823. const AXPath: string
  3824. );
  3825. begin
  3826. CheckEquals(AExpected,AObject.getDouble(AXPath), 0.0001, AXPath);
  3827. end;
  3828. {$ENDIF HAS_SDO_DOUBLE}
  3829. {$IFDEF HAS_SDO_FLOAT}
  3830. procedure TSDOBaseDataObject_Test.check_xpath_value(
  3831. const AExpected: TSDOFloat;
  3832. const AObject: ISDODataObject;
  3833. const AXPath: string
  3834. );
  3835. begin
  3836. CheckEquals(AExpected,AObject.getFloat(AXPath), 0.0001, AXPath);
  3837. end;
  3838. {$ENDIF HAS_SDO_FLOAT}
  3839. {$IFDEF HAS_SDO_LONG}
  3840. procedure TSDOBaseDataObject_Test.check_xpath_value(
  3841. const AExpected: TSDOLong;
  3842. const AObject: ISDODataObject;
  3843. const AXPath: string
  3844. );
  3845. begin
  3846. CheckEquals(AExpected,AObject.getLong(AXPath), AXPath);
  3847. end;
  3848. {$ENDIF HAS_SDO_LONG}
  3849. {$IFDEF HAS_SDO_SHORT}
  3850. procedure TSDOBaseDataObject_Test.check_xpath_value(
  3851. const AExpected: TSDOShort;
  3852. const AObject: ISDODataObject;
  3853. const AXPath: string
  3854. );
  3855. begin
  3856. CheckEquals(AExpected,AObject.getShort(AXPath), AXPath);
  3857. end;
  3858. {$ENDIF HAS_SDO_SHORT}
  3859. procedure TSDOBaseDataObject_Test.check_xpath_value(
  3860. const AExpected: TSDOByte;
  3861. const AObject: ISDODataObject;
  3862. const AXPath: string
  3863. );
  3864. begin
  3865. CheckEquals(AExpected,AObject.getByte(AXPath), AXPath);
  3866. end;
  3867. procedure TSDOBaseDataObject_Test.check_xpath_value(
  3868. const AExpected: TSDODateTime;
  3869. const AObject: ISDODataObject;
  3870. const AXPath: string
  3871. );
  3872. begin
  3873. CheckEquals(AExpected,AObject.getDate(AXPath), AXPath, False);
  3874. end;
  3875. procedure TSDOBaseDataObject_Test.get_byte_xpath();
  3876. const
  3877. LOCAL_PROP_TYPE = ByteType;
  3878. LOCAL_PROP_1_NAME = s_PROP_BYTE_1;
  3879. LOCAL_PROP_2_NAME = s_PROP_BYTE_2;
  3880. LOCAL_PROP_A_NAME = s_PROP_BYTE_A;
  3881. LOCAL_PROP_B_NAME = s_PROP_BYTE_B;
  3882. function local_create_factory() : ISDODataFactory;
  3883. var
  3884. res : ISDODataFactory;
  3885. tfg : TTypeFlags;
  3886. begin
  3887. tfg := [];
  3888. if is_open_type() then
  3889. Include(tfg,tfIsOpen);
  3890. res := TSDODataFactory.Create() as ISDODataFactory;
  3891. res.AddType(s_URI_1,s_TYPE_1,tfg);
  3892. res.AddType(s_URI_1,s_TYPE_2,tfg);
  3893. res.AddType(s_URI_1,s_TYPE_3,tfg);
  3894. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3895. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3896. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  3897. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3898. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3899. Result := res;
  3900. end;
  3901. var
  3902. locFac : ISDODataFactory;
  3903. o1, o2 : ISDODataObject;
  3904. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOByte;
  3905. begin
  3906. o1_val_1 := RandomRange(Low(TSDOByte),High(TSDOByte));
  3907. o1_val_2 := RandomRange(Low(TSDOByte),High(TSDOByte));
  3908. o2_val_A := RandomRange(Low(TSDOByte),High(TSDOByte));
  3909. o2_val_B := RandomRange(Low(TSDOByte),High(TSDOByte));
  3910. locFac := local_create_factory();
  3911. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  3912. o1.setByte(LOCAL_PROP_1_NAME,o1_val_1);
  3913. o1.setByte(LOCAL_PROP_2_NAME,o1_val_2);
  3914. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  3915. o2.setByte(LOCAL_PROP_A_NAME,o2_val_A);
  3916. o2.setByte(LOCAL_PROP_B_NAME,o2_val_B);
  3917. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  3918. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  3919. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  3920. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  3921. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  3922. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  3923. end;
  3924. {$IFDEF HAS_SDO_CHAR}
  3925. procedure TSDOBaseDataObject_Test.get_char_xpath();
  3926. const
  3927. LOCAL_PROP_TYPE = CharacterType;
  3928. LOCAL_PROP_1_NAME = s_PROP_CHAR_1;
  3929. LOCAL_PROP_2_NAME = s_PROP_CHAR_2;
  3930. LOCAL_PROP_A_NAME = s_PROP_CHAR_A;
  3931. LOCAL_PROP_B_NAME = s_PROP_CHAR_B;
  3932. function local_create_factory() : ISDODataFactory;
  3933. var
  3934. res : ISDODataFactory;
  3935. tfg : TTypeFlags;
  3936. begin
  3937. tfg := [];
  3938. if is_open_type() then
  3939. Include(tfg,tfIsOpen);
  3940. res := TSDODataFactory.Create() as ISDODataFactory;
  3941. res.AddType(s_URI_1,s_TYPE_1,tfg);
  3942. res.AddType(s_URI_1,s_TYPE_2,tfg);
  3943. res.AddType(s_URI_1,s_TYPE_3,tfg);
  3944. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3945. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3946. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  3947. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3948. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3949. Result := res;
  3950. end;
  3951. var
  3952. locFac : ISDODataFactory;
  3953. o1, o2 : ISDODataObject;
  3954. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOChar;
  3955. begin
  3956. o1_val_1 := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  3957. o1_val_2 := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  3958. o2_val_A := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  3959. o2_val_B := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  3960. locFac := local_create_factory();
  3961. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  3962. o1.setCharacter(LOCAL_PROP_1_NAME,o1_val_1);
  3963. o1.setCharacter(LOCAL_PROP_2_NAME,o1_val_2);
  3964. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  3965. o2.setCharacter(LOCAL_PROP_A_NAME,o2_val_A);
  3966. o2.setCharacter(LOCAL_PROP_B_NAME,o2_val_B);
  3967. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  3968. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  3969. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  3970. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  3971. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  3972. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  3973. end;
  3974. {$ENDIF HAS_SDO_CHAR}
  3975. {$IFDEF HAS_SDO_CURRENCY}
  3976. procedure TSDOBaseDataObject_Test.get_currency_xpath();
  3977. const
  3978. LOCAL_PROP_TYPE = CurrencyType;
  3979. LOCAL_PROP_1_NAME = s_PROP_CURRENCY_1;
  3980. LOCAL_PROP_2_NAME = s_PROP_CURRENCY_2;
  3981. LOCAL_PROP_A_NAME = s_PROP_CURRENCY_A;
  3982. LOCAL_PROP_B_NAME = s_PROP_CURRENCY_B;
  3983. function local_create_factory() : ISDODataFactory;
  3984. var
  3985. res : ISDODataFactory;
  3986. tfg : TTypeFlags;
  3987. begin
  3988. tfg := [];
  3989. if is_open_type() then
  3990. Include(tfg,tfIsOpen);
  3991. res := TSDODataFactory.Create() as ISDODataFactory;
  3992. res.AddType(s_URI_1,s_TYPE_1,tfg);
  3993. res.AddType(s_URI_1,s_TYPE_2,tfg);
  3994. res.AddType(s_URI_1,s_TYPE_3,tfg);
  3995. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3996. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3997. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  3998. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  3999. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4000. Result := res;
  4001. end;
  4002. var
  4003. locFac : ISDODataFactory;
  4004. o1, o2 : ISDODataObject;
  4005. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOCurrency;
  4006. begin
  4007. o1_val_1 := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4008. o1_val_2 := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4009. o2_val_A := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4010. o2_val_B := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4011. locFac := local_create_factory();
  4012. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  4013. o1.setCurrency(LOCAL_PROP_1_NAME,o1_val_1);
  4014. o1.setCurrency(LOCAL_PROP_2_NAME,o1_val_2);
  4015. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  4016. o2.setCurrency(LOCAL_PROP_A_NAME,o2_val_A);
  4017. o2.setCurrency(LOCAL_PROP_B_NAME,o2_val_B);
  4018. check_xpath_value_currency(o1_val_1, o1,LOCAL_PROP_1_NAME);
  4019. check_xpath_value_currency(o1_val_2, o1, LOCAL_PROP_2_NAME);
  4020. check_xpath_value_currency(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  4021. check_xpath_value_currency(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  4022. check_xpath_value_currency(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  4023. check_xpath_value_currency(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  4024. end;
  4025. {$ENDIF HAS_SDO_CURRENCY}
  4026. {$IFDEF HAS_SDO_DOUBLE}
  4027. procedure TSDOBaseDataObject_Test.get_double_xpath();
  4028. const
  4029. LOCAL_PROP_TYPE = DoubleType;
  4030. LOCAL_PROP_1_NAME = s_PROP_DOUBLE_1;
  4031. LOCAL_PROP_2_NAME = s_PROP_DOUBLE_2;
  4032. LOCAL_PROP_A_NAME = s_PROP_DOUBLE_A;
  4033. LOCAL_PROP_B_NAME = s_PROP_DOUBLE_B;
  4034. function local_create_factory() : ISDODataFactory;
  4035. var
  4036. res : ISDODataFactory;
  4037. tfg : TTypeFlags;
  4038. begin
  4039. tfg := [];
  4040. if is_open_type() then
  4041. Include(tfg,tfIsOpen);
  4042. res := TSDODataFactory.Create() as ISDODataFactory;
  4043. res.AddType(s_URI_1,s_TYPE_1,tfg);
  4044. res.AddType(s_URI_1,s_TYPE_2,tfg);
  4045. res.AddType(s_URI_1,s_TYPE_3,tfg);
  4046. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4047. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4048. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  4049. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4050. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4051. Result := res;
  4052. end;
  4053. var
  4054. locFac : ISDODataFactory;
  4055. o1, o2 : ISDODataObject;
  4056. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDODouble;
  4057. begin
  4058. o1_val_1 := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4059. o1_val_2 := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4060. o2_val_A := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4061. o2_val_B := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4062. locFac := local_create_factory();
  4063. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  4064. o1.setDouble(LOCAL_PROP_1_NAME,o1_val_1);
  4065. o1.setDouble(LOCAL_PROP_2_NAME,o1_val_2);
  4066. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  4067. o2.setDouble(LOCAL_PROP_A_NAME,o2_val_A);
  4068. o2.setDouble(LOCAL_PROP_B_NAME,o2_val_B);
  4069. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  4070. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  4071. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  4072. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  4073. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  4074. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  4075. end;
  4076. {$ENDIF HAS_SDO_DOUBLE}
  4077. {$IFDEF HAS_SDO_FLOAT}
  4078. procedure TSDOBaseDataObject_Test.get_float_xpath();
  4079. const
  4080. LOCAL_PROP_TYPE = FloatType;
  4081. LOCAL_PROP_1_NAME = s_PROP_FLOAT_1;
  4082. LOCAL_PROP_2_NAME = s_PROP_FLOAT_2;
  4083. LOCAL_PROP_A_NAME = s_PROP_FLOAT_A;
  4084. LOCAL_PROP_B_NAME = s_PROP_FLOAT_B;
  4085. function local_create_factory() : ISDODataFactory;
  4086. var
  4087. res : ISDODataFactory;
  4088. tfg : TTypeFlags;
  4089. begin
  4090. tfg := [];
  4091. if is_open_type() then
  4092. Include(tfg,tfIsOpen);
  4093. res := TSDODataFactory.Create() as ISDODataFactory;
  4094. res.AddType(s_URI_1,s_TYPE_1,tfg);
  4095. res.AddType(s_URI_1,s_TYPE_2,tfg);
  4096. res.AddType(s_URI_1,s_TYPE_3,tfg);
  4097. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4098. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4099. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  4100. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4101. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4102. Result := res;
  4103. end;
  4104. var
  4105. locFac : ISDODataFactory;
  4106. o1, o2 : ISDODataObject;
  4107. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOFloat;
  4108. begin
  4109. o1_val_1 := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4110. o1_val_2 := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4111. o2_val_A := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4112. o2_val_B := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4113. locFac := local_create_factory();
  4114. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  4115. o1.setFloat(LOCAL_PROP_1_NAME,o1_val_1);
  4116. o1.setFloat(LOCAL_PROP_2_NAME,o1_val_2);
  4117. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  4118. o2.setFloat(LOCAL_PROP_A_NAME,o2_val_A);
  4119. o2.setFloat(LOCAL_PROP_B_NAME,o2_val_B);
  4120. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  4121. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  4122. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  4123. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  4124. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  4125. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  4126. end;
  4127. {$ENDIF HAS_SDO_FLOAT}
  4128. procedure TSDOBaseDataObject_Test.get_date_xpath();
  4129. const
  4130. LOCAL_PROP_TYPE = DateTimeType;
  4131. LOCAL_PROP_1_NAME = s_PROP_DATE_1;
  4132. LOCAL_PROP_2_NAME = s_PROP_DATE_2;
  4133. LOCAL_PROP_A_NAME = s_PROP_DATE_A;
  4134. LOCAL_PROP_B_NAME = s_PROP_DATE_B;
  4135. function local_create_factory() : ISDODataFactory;
  4136. var
  4137. res : ISDODataFactory;
  4138. tfg : TTypeFlags;
  4139. begin
  4140. tfg := [];
  4141. if is_open_type() then
  4142. Include(tfg,tfIsOpen);
  4143. res := TSDODataFactory.Create() as ISDODataFactory;
  4144. res.AddType(s_URI_1,s_TYPE_1,tfg);
  4145. res.AddType(s_URI_1,s_TYPE_2,tfg);
  4146. res.AddType(s_URI_1,s_TYPE_3,tfg);
  4147. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4148. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4149. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  4150. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4151. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4152. Result := res;
  4153. end;
  4154. var
  4155. locFac : ISDODataFactory;
  4156. o1, o2 : ISDODataObject;
  4157. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDODateTime;
  4158. begin
  4159. o1_val_1 := RandomDate();
  4160. o1_val_2 := RandomDate();
  4161. o2_val_A := RandomDate();
  4162. o2_val_B := RandomDate();
  4163. locFac := local_create_factory();
  4164. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  4165. o1.setDate(LOCAL_PROP_1_NAME,o1_val_1);
  4166. o1.setDate(LOCAL_PROP_2_NAME,o1_val_2);
  4167. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  4168. o2.setDate(LOCAL_PROP_A_NAME,o2_val_A);
  4169. o2.setDate(LOCAL_PROP_B_NAME,o2_val_B);
  4170. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  4171. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  4172. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  4173. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  4174. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  4175. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  4176. end;
  4177. {$IFDEF HAS_SDO_LONG}
  4178. procedure TSDOBaseDataObject_Test.get_long_xpath();
  4179. const
  4180. LOCAL_PROP_TYPE = LongType;
  4181. LOCAL_PROP_1_NAME = s_PROP_LONG_1;
  4182. LOCAL_PROP_2_NAME = s_PROP_LONG_2;
  4183. LOCAL_PROP_A_NAME = s_PROP_LONG_A;
  4184. LOCAL_PROP_B_NAME = s_PROP_LONG_B;
  4185. function local_create_factory() : ISDODataFactory;
  4186. var
  4187. res : ISDODataFactory;
  4188. tfg : TTypeFlags;
  4189. begin
  4190. tfg := [];
  4191. if is_open_type() then
  4192. Include(tfg,tfIsOpen);
  4193. res := TSDODataFactory.Create() as ISDODataFactory;
  4194. res.AddType(s_URI_1,s_TYPE_1,tfg);
  4195. res.AddType(s_URI_1,s_TYPE_2,tfg);
  4196. res.AddType(s_URI_1,s_TYPE_3,tfg);
  4197. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4198. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4199. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  4200. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4201. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4202. Result := res;
  4203. end;
  4204. var
  4205. locFac : ISDODataFactory;
  4206. o1, o2 : ISDODataObject;
  4207. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOLong;
  4208. begin
  4209. o1_val_1 := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4210. o1_val_2 := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4211. o2_val_A := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4212. o2_val_B := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  4213. locFac := local_create_factory();
  4214. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  4215. o1.setLong(LOCAL_PROP_1_NAME,o1_val_1);
  4216. o1.setLong(LOCAL_PROP_2_NAME,o1_val_2);
  4217. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  4218. o2.setLong(LOCAL_PROP_A_NAME,o2_val_A);
  4219. o2.setLong(LOCAL_PROP_B_NAME,o2_val_B);
  4220. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  4221. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  4222. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  4223. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  4224. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  4225. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  4226. end;
  4227. {$ENDIF HAS_SDO_LONG}
  4228. {$IFDEF HAS_SDO_SHORT}
  4229. procedure TSDOBaseDataObject_Test.get_short_xpath();
  4230. const
  4231. LOCAL_PROP_TYPE = ShortType;
  4232. LOCAL_PROP_1_NAME = s_PROP_SHORT_1;
  4233. LOCAL_PROP_2_NAME = s_PROP_SHORT_2;
  4234. LOCAL_PROP_A_NAME = s_PROP_SHORT_A;
  4235. LOCAL_PROP_B_NAME = s_PROP_SHORT_B;
  4236. function local_create_factory() : ISDODataFactory;
  4237. var
  4238. res : ISDODataFactory;
  4239. tfg : TTypeFlags;
  4240. begin
  4241. tfg := [];
  4242. if is_open_type() then
  4243. Include(tfg,tfIsOpen);
  4244. res := TSDODataFactory.Create() as ISDODataFactory;
  4245. res.AddType(s_URI_1,s_TYPE_1,tfg);
  4246. res.AddType(s_URI_1,s_TYPE_2,tfg);
  4247. res.AddType(s_URI_1,s_TYPE_3,tfg);
  4248. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4249. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4250. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  4251. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4252. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4253. Result := res;
  4254. end;
  4255. var
  4256. locFac : ISDODataFactory;
  4257. o1, o2 : ISDODataObject;
  4258. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOShort;
  4259. begin
  4260. o1_val_1 := RandomRange(Low(TSDOShort),High(TSDOShort));
  4261. o1_val_2 := RandomRange(Low(TSDOShort),High(TSDOShort));
  4262. o2_val_A := RandomRange(Low(TSDOShort),High(TSDOShort));
  4263. o2_val_B := RandomRange(Low(TSDOShort),High(TSDOShort));
  4264. locFac := local_create_factory();
  4265. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  4266. o1.setShort(LOCAL_PROP_1_NAME,o1_val_1);
  4267. o1.setShort(LOCAL_PROP_2_NAME,o1_val_2);
  4268. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  4269. o2.setShort(LOCAL_PROP_A_NAME,o2_val_A);
  4270. o2.setShort(LOCAL_PROP_B_NAME,o2_val_B);
  4271. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  4272. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  4273. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  4274. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  4275. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  4276. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  4277. end;
  4278. {$ENDIF HAS_SDO_SHORT}
  4279. procedure TSDOBaseDataObject_Test.check_xpath_value(
  4280. const AExpected: TSDOBoolean;
  4281. const AObject: ISDODataObject;
  4282. const AXPath: string
  4283. );
  4284. begin
  4285. CheckEquals(AExpected,AObject.getBoolean(AXPath), AXPath);
  4286. end;
  4287. procedure TSDOBaseDataObject_Test.get_bool_xpath();
  4288. const
  4289. LOCAL_PROP_TYPE = BooleanType;
  4290. LOCAL_PROP_1_NAME = s_PROP_BOOL_1;
  4291. LOCAL_PROP_2_NAME = s_PROP_BOOL_2;
  4292. LOCAL_PROP_A_NAME = s_PROP_BOOL_A;
  4293. LOCAL_PROP_B_NAME = s_PROP_BOOL_B;
  4294. function local_create_factory() : ISDODataFactory;
  4295. var
  4296. res : ISDODataFactory;
  4297. tfg : TTypeFlags;
  4298. begin
  4299. tfg := [];
  4300. if is_open_type() then
  4301. Include(tfg,tfIsOpen);
  4302. res := TSDODataFactory.Create() as ISDODataFactory;
  4303. res.AddType(s_URI_1,s_TYPE_1,tfg);
  4304. res.AddType(s_URI_1,s_TYPE_2,tfg);
  4305. res.AddType(s_URI_1,s_TYPE_3,tfg);
  4306. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4307. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4308. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  4309. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4310. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4311. Result := res;
  4312. end;
  4313. var
  4314. locFac : ISDODataFactory;
  4315. o1, o2 : ISDODataObject;
  4316. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOBoolean;
  4317. begin
  4318. o1_val_1 := ( RandomRange(-1234,56789) mod 3 ) = 0;
  4319. o1_val_2 := ( RandomRange(-1234,56789) mod 3 ) = 0;
  4320. o2_val_A := ( RandomRange(-1234,56789) mod 3 ) = 0;
  4321. o2_val_B := ( RandomRange(-1234,56789) mod 3 ) = 0;
  4322. locFac := local_create_factory();
  4323. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  4324. o1.setBoolean(LOCAL_PROP_1_NAME,o1_val_1);
  4325. o1.setBoolean(LOCAL_PROP_2_NAME,o1_val_2);
  4326. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  4327. o2.setBoolean(LOCAL_PROP_A_NAME,o2_val_A);
  4328. o2.setBoolean(LOCAL_PROP_B_NAME,o2_val_B);
  4329. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  4330. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  4331. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  4332. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  4333. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  4334. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  4335. end;
  4336. procedure TSDOBaseDataObject_Test.check_xpath_value(
  4337. const AExpected: TSDOString;
  4338. const AObject: ISDODataObject;
  4339. const AXPath: string
  4340. );
  4341. begin
  4342. CheckEquals(AExpected,AObject.getString(AXPath), AXPath);
  4343. end;
  4344. procedure TSDOBaseDataObject_Test.get_string_xpath();
  4345. const
  4346. LOCAL_PROP_TYPE = StringType;
  4347. LOCAL_PROP_1_NAME = s_PROP_STR_1;
  4348. LOCAL_PROP_2_NAME = s_PROP_STR_2;
  4349. LOCAL_PROP_A_NAME = s_PROP_STR_A;
  4350. LOCAL_PROP_B_NAME = s_PROP_STR_B;
  4351. function local_create_factory() : ISDODataFactory;
  4352. var
  4353. res : ISDODataFactory;
  4354. tfg : TTypeFlags;
  4355. begin
  4356. tfg := [];
  4357. if is_open_type() then
  4358. Include(tfg,tfIsOpen);
  4359. res := TSDODataFactory.Create() as ISDODataFactory;
  4360. res.AddType(s_URI_1,s_TYPE_1,tfg);
  4361. res.AddType(s_URI_1,s_TYPE_2,tfg);
  4362. res.AddType(s_URI_1,s_TYPE_3,tfg);
  4363. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_1_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4364. res.addProperty(s_URI_1,s_TYPE_1,LOCAL_PROP_2_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4365. res.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[pfIsContainment]);
  4366. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_A_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4367. res.addProperty(s_URI_1,s_TYPE_2,LOCAL_PROP_B_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LOCAL_PROP_TYPE],[]);
  4368. Result := res;
  4369. end;
  4370. var
  4371. locFac : ISDODataFactory;
  4372. o1, o2 : ISDODataObject;
  4373. o1_val_1, o1_val_2, o2_val_A, o2_val_B : TSDOString;
  4374. begin
  4375. o1_val_1 := RandomString(RandomRange(0,1000));
  4376. o1_val_2 := RandomString(RandomRange(0,1000));
  4377. o2_val_A := RandomString(RandomRange(0,1000));
  4378. o2_val_B := RandomString(RandomRange(0,1000));
  4379. locFac := local_create_factory();
  4380. o1 := locFac.createNew(s_URI_1,s_TYPE_1);
  4381. o1.setString(LOCAL_PROP_1_NAME,o1_val_1);
  4382. o1.setString(LOCAL_PROP_2_NAME,o1_val_2);
  4383. o2 := O1.createDataObject(s_PROP_OBJ_CONT);
  4384. o2.setString(LOCAL_PROP_A_NAME,o2_val_A);
  4385. o2.setString(LOCAL_PROP_B_NAME,o2_val_B);
  4386. check_xpath_value(o1_val_1, o1,LOCAL_PROP_1_NAME);
  4387. check_xpath_value(o1_val_2, o1, LOCAL_PROP_2_NAME);
  4388. check_xpath_value(o2_val_A, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_A_NAME]));
  4389. check_xpath_value(o2_val_B, o1, Format('%s/%s',[s_PROP_OBJ_CONT,LOCAL_PROP_B_NAME]));
  4390. check_xpath_value(o1_val_1, o2, Format('%s/%s',['..',LOCAL_PROP_1_NAME]));
  4391. check_xpath_value(o1_val_2, o2, Format('%s/%s',['..',LOCAL_PROP_2_NAME]));
  4392. end;
  4393. procedure TSDOBaseDataObject_Test.date_procs();
  4394. const VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4395. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4396. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4397. procedure SetConstants();
  4398. var
  4399. d : TSDODate;
  4400. begin
  4401. FillChar(d,SizeOf(TSDODate),#0);
  4402. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  4403. d.HourOffset := 5;
  4404. d.MinuteOffset := 6;
  4405. PSDODate(@VAL_1)^ := d;
  4406. FillChar(d,SizeOf(TSDODate),#0);
  4407. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  4408. d.HourOffset := 0;
  4409. d.MinuteOffset := 13;
  4410. PSDODate(@VAL_3)^ := d;
  4411. end;
  4412. var
  4413. obj : ISDODataObject;
  4414. ok : Boolean;
  4415. begin
  4416. SetConstants();
  4417. obj := Create_Object();
  4418. ok := False;
  4419. try
  4420. obj.setDate(obj.getProperty('qsdc'),VAL_1);
  4421. except
  4422. on e : ESDOPropertyNotFoundException do begin
  4423. ok := True;
  4424. end;
  4425. end;
  4426. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  4427. ok := False;
  4428. try
  4429. obj.getDate(obj.getProperty('qsdc'));
  4430. except
  4431. on e : ESDOPropertyNotFoundException do begin
  4432. ok := True;
  4433. end;
  4434. end;
  4435. CheckEquals(True,ok,'Expect ESDOPropertyNotFoundException.');
  4436. ok := False;
  4437. try
  4438. obj.setDate(obj.getProperty(s_PROP_DATE_3),VAL_1);
  4439. except
  4440. on e : ESDOIllegalArgumentException do begin
  4441. ok := True;
  4442. end;
  4443. end;
  4444. CheckEquals(True,ok,'Expect ESDOIllegalArgumentException.');
  4445. obj.setDate(obj.getProperty(s_PROP_DATE_1),VAL_1);
  4446. CheckEquals(VAL_1,obj.getDate(obj.getProperty(s_PROP_DATE_1)));
  4447. CheckEquals(VAL_1,obj.getDate(s_PROP_DATE_1));
  4448. CheckEquals(VAL_1,obj.getDate(obj.getPropertyIndex(obj.getProperty(s_PROP_DATE_1))));
  4449. obj.setDate(obj.getProperty(s_PROP_DATE_1),VAL_2);
  4450. CheckEquals(VAL_2,obj.getDate(obj.getProperty(s_PROP_DATE_1)));
  4451. CheckEquals(VAL_2,obj.getDate(s_PROP_DATE_1));
  4452. CheckEquals(VAL_2,obj.getDate(obj.getPropertyIndex(obj.getProperty(s_PROP_DATE_1))));
  4453. obj.setDate(obj.getProperty(s_PROP_DATE_1),VAL_3);
  4454. CheckEquals(VAL_3,obj.getDate(obj.getProperty(s_PROP_DATE_1)));
  4455. CheckEquals(VAL_3,obj.getDate(s_PROP_DATE_1));
  4456. CheckEquals(VAL_3,obj.getDate(obj.getPropertyIndex(obj.getProperty(s_PROP_DATE_1))));
  4457. obj.setDate(obj.getProperty(s_PROP_DATE_2),VAL_1);
  4458. CheckEquals(VAL_1,obj.getDate(obj.getProperty(s_PROP_DATE_2)));
  4459. CheckEquals(VAL_1,obj.getDate(s_PROP_DATE_2));
  4460. CheckEquals(VAL_1,obj.getDate(obj.getPropertyIndex(obj.getProperty(s_PROP_DATE_2))));
  4461. obj.setDate(obj.getProperty(s_PROP_DATE_2),VAL_2);
  4462. CheckEquals(VAL_2,obj.getDate(obj.getProperty(s_PROP_DATE_2)));
  4463. CheckEquals(VAL_2,obj.getDate(s_PROP_DATE_2));
  4464. CheckEquals(VAL_2,obj.getDate(obj.getPropertyIndex(obj.getProperty(s_PROP_DATE_2))));
  4465. obj.setDate(obj.getProperty(s_PROP_DATE_2),VAL_3);
  4466. CheckEquals(VAL_3,obj.getDate(obj.getProperty(s_PROP_DATE_2)));
  4467. CheckEquals(VAL_3,obj.getDate(s_PROP_DATE_2));
  4468. CheckEquals(VAL_3,obj.getDate(obj.getPropertyIndex(obj.getProperty(s_PROP_DATE_2))));
  4469. end;
  4470. procedure TSDOBaseDataObject_Test.CheckEquals(expected, actual: TSDODate;
  4471. msg: string; const AStrict: Boolean
  4472. );
  4473. var
  4474. e, a : TDateTime;
  4475. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  4476. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  4477. begin
  4478. if AStrict then begin
  4479. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  4480. end else begin
  4481. e := NormalizeToUTC(expected);
  4482. a := NormalizeToUTC(actual);
  4483. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  4484. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  4485. CheckEquals(e_y,a_y,msg);
  4486. CheckEquals(e_m,a_m,msg);
  4487. CheckEquals(e_d,a_d,msg);
  4488. CheckEquals(e_h,a_h,msg);
  4489. CheckEquals(e_mn,a_mn,msg);
  4490. CheckEquals(e_ss,a_ss,msg);
  4491. CheckEquals(e_ms,a_ms,msg);
  4492. end;
  4493. end;
  4494. procedure TSDOBaseDataObject_Test.date_multivalue();
  4495. const LOCAL_PROP = s_PROP_DATE_3; LOCAL_ARRAY_LEN = 100;
  4496. var
  4497. val_list : array[0..Pred(LOCAL_ARRAY_LEN)] of TSDODate;
  4498. procedure PrepareArray();
  4499. var
  4500. k : Integer;
  4501. begin
  4502. Randomize();
  4503. for k := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  4504. val_list[k].Date := EncodeDateTime(
  4505. RandomRange(1900,2009),RandomRange(1,12),RandomRange(1,28),
  4506. RandomRange(1,23),RandomRange(0,59),RandomRange(0,59), RandomRange(0,999)
  4507. );
  4508. val_list[k].HourOffset := RandomRange(0,10);
  4509. val_list[k].MinuteOffset := RandomRange(0,59);
  4510. end;
  4511. end;
  4512. var
  4513. obj : ISDODataObject;
  4514. ls, ls1 : ISDODataObjectList;
  4515. i : Integer;
  4516. crs : ILinkedListCursor;
  4517. ok : Boolean;
  4518. begin
  4519. PrepareArray();
  4520. obj := Create_Object();
  4521. ok := False;
  4522. try
  4523. ls := obj.getList(s_PROP_DATE_1);
  4524. except
  4525. on e : ESDOIllegalArgumentException do begin
  4526. ok := True;
  4527. end;
  4528. end;
  4529. Check(ok,Format('"%s" is not a multivalue property.',[s_PROP_DATE_1]));
  4530. ls := obj.getList(LOCAL_PROP);
  4531. Check(ls <> nil);
  4532. ls1 := obj.getList(LOCAL_PROP);
  4533. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Name)');
  4534. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  4535. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  4536. ls1 := obj.getList(obj.getType().getPropertyIndex(LOCAL_PROP));
  4537. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Index)');
  4538. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  4539. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  4540. ls1 := obj.getList(obj.getType().getProperty(LOCAL_PROP));
  4541. CheckEquals(PtrInt(ls),PtrInt(ls1), 'getList(Name) <> getList(Property)');
  4542. CheckEquals(0,ls.size(),'Size');
  4543. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  4544. ls.append(val_list[i]);
  4545. end;
  4546. crs := ls.getCursor();
  4547. Check(crs <> nil,'ls.getCursor()');
  4548. crs.Reset();
  4549. CheckEquals(LOCAL_ARRAY_LEN,ls.size(),'Size');
  4550. for i := 0 to Pred(LOCAL_ARRAY_LEN) do begin
  4551. crs.MoveNext();
  4552. CheckEquals(val_list[i],ls.getDate(),'append() <> getByte()');
  4553. end;
  4554. end;
  4555. procedure TSDOBaseDataObject_Test.date_unset_isset();
  4556. const
  4557. LOCAL_PROP = s_PROP_DATE_1;
  4558. LOCAL_PROP_ARRAY = s_PROP_DATE_3;
  4559. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4560. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4561. procedure SetConstants();
  4562. var
  4563. d : TSDODate;
  4564. begin
  4565. FillChar(d,SizeOf(TSDODate),#0);
  4566. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  4567. d.HourOffset := 5;
  4568. d.MinuteOffset := 6;
  4569. PSDODate(@VAL_1)^ := d;
  4570. FillChar(d,SizeOf(TSDODate),#0);
  4571. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  4572. d.HourOffset := 0;
  4573. d.MinuteOffset := 13;
  4574. PSDODate(@VAL_2)^ := d;
  4575. end;
  4576. var
  4577. obj : ISDODataObject;
  4578. ls : ISDODataObjectList;
  4579. begin
  4580. SetConstants();
  4581. obj := Create_Object();
  4582. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  4583. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 1');
  4584. obj.setDate(LOCAL_PROP, VAL_1);
  4585. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  4586. obj.unset(LOCAL_PROP);
  4587. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  4588. CheckEquals(obj.getProperty(LOCAL_PROP).getDateDefault(),obj.getDate(LOCAL_PROP),'"unSet" should restore the default value');
  4589. obj.setDate(LOCAL_PROP, VAL_2);
  4590. CheckEquals(True,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  4591. obj.unset(LOCAL_PROP);
  4592. CheckEquals(False,obj.isSet(LOCAL_PROP),LOCAL_PROP);
  4593. ls := obj.getList(LOCAL_PROP_ARRAY);
  4594. Check(ls <> nil);
  4595. CheckEquals(0,ls.size());
  4596. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 2');
  4597. ls.append(VAL_1);
  4598. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 3');
  4599. obj.unset(LOCAL_PROP_ARRAY);
  4600. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  4601. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 4');
  4602. CheckEquals(0,ls.size());
  4603. ls.append(VAL_1);
  4604. ls.append(VAL_2);
  4605. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 5');
  4606. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  4607. CheckEquals(True,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 6');
  4608. CheckEquals(2,ls.size());
  4609. obj.unset(LOCAL_PROP_ARRAY);
  4610. CheckEquals(PtrInt(ls),PtrInt(obj.getList(LOCAL_PROP_ARRAY)));
  4611. CheckEquals(False,obj.isSet(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY + ' 7');
  4612. CheckEquals(0,ls.size());
  4613. end;
  4614. procedure TSDOBaseDataObject_Test.date_setnull_isnull();
  4615. const
  4616. LOCAL_PROP = s_PROP_DATE_1;
  4617. LOCAL_PROP_ARRAY = s_PROP_DATE_3;
  4618. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4619. var
  4620. obj : ISDODataObject;
  4621. begin
  4622. PSDODate(@VAL_1)^.Date := Now();
  4623. obj := Create_Object();
  4624. // these _does_ depend on the property's default
  4625. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  4626. CheckEquals(False,obj.isNull(LOCAL_PROP_ARRAY),LOCAL_PROP_ARRAY);
  4627. obj.setDate(LOCAL_PROP, VAL_1);
  4628. CheckEquals(False,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  4629. obj.setNull(LOCAL_PROP);
  4630. CheckEquals(True,obj.isNull(LOCAL_PROP),LOCAL_PROP);
  4631. CheckEquals(ZERO_DATE,obj.getDate(LOCAL_PROP),LOCAL_PROP);
  4632. end;
  4633. procedure TSDOBaseDataObject_Test.property_default_value_date();
  4634. const
  4635. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4636. var
  4637. locFactory : ISDODataFactory;
  4638. locA : ISDODataObject;
  4639. locProp : ISDOProperty;
  4640. tfg : TTypeFlags;
  4641. begin
  4642. PSDODate(@VAL_1)^.Date := Now();
  4643. tfg := [];
  4644. if is_open_type() then
  4645. Include(tfg,tfIsOpen);
  4646. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  4647. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  4648. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_DATE_1,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  4649. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_DATE_1);
  4650. locProp.setDefault(VAL_1);
  4651. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  4652. CheckEquals(VAL_1, locA.getDate(locProp), 'getDate');
  4653. CheckEquals(False, locA.isSet(locProp), 'isSet');
  4654. end;
  4655. procedure TSDOBaseDataObject_Test.property_default_value_unset_date();
  4656. const
  4657. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4658. VAL_2 : TSDODate = ( Date : 0; HourOffset : 3; MinuteOffset : 4; );
  4659. var
  4660. locFactory : ISDODataFactory;
  4661. locA : ISDODataObject;
  4662. locProp : ISDOProperty;
  4663. tfg : TTypeFlags;
  4664. begin
  4665. PSDODate(@VAL_1)^.Date := Now();
  4666. PSDODate(@VAL_2)^.Date := Date() - 100;
  4667. tfg := [];
  4668. if is_open_type() then
  4669. Include(tfg,tfIsOpen);
  4670. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  4671. locFactory.AddType(s_URI_1,s_TYPE_1,tfg);
  4672. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_DATE_1,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  4673. locProp := locFactory.getType(s_URI_1,s_TYPE_1).getProperty(s_PROP_DATE_1);
  4674. locProp.setDefault(VAL_1);
  4675. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  4676. locA.setDate(locProp, VAL_2);
  4677. CheckEquals(True, locA.isSet(locProp), 'isSet');
  4678. CheckEquals(VAL_2, locA.getDate(locProp), 'getDate');
  4679. locA.unset(locProp);
  4680. CheckEquals(False, locA.isSet(locProp), 'isSet');
  4681. CheckEquals(VAL_1, locA.getDate(locProp), 'getDate');
  4682. end;
  4683. { TObserver_Test }
  4684. procedure TObserver_Test.ObserverInfo_create();
  4685. var
  4686. locFactory : ISDODataFactory;
  4687. locA : ISDODataObject;
  4688. locProp : ISDOProperty;
  4689. locRef : TObserverInfo;
  4690. begin
  4691. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  4692. locFactory.AddType(s_URI_1,s_TYPE_1,[]);
  4693. locFactory.AddType(s_URI_1,s_TYPE_2,[]);
  4694. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_REF,s_URI_1,s_TYPE_2,[]);
  4695. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  4696. locProp := locA.getProperty(s_PROP_OBJ_REF);
  4697. locRef := TObserverInfo.Create(locA,locProp);
  4698. try
  4699. CheckEquals(PtrUInt(locA), PtrUInt(locRef.GetDataObject()));
  4700. CheckEquals(PtrUInt(locProp), PtrUInt(locRef.GetRefProperty()));
  4701. finally
  4702. FreeAndNil(locRef);
  4703. end;
  4704. end;
  4705. procedure TObserver_Test.ObserverList_add_find();
  4706. var
  4707. locFactory : ISDODataFactory;
  4708. locA, locB : ISDODataObject;
  4709. locProp, locPropB : ISDOProperty;
  4710. locRef : TObserverInfo;
  4711. locRefList : TDataObjectObserverList;
  4712. begin
  4713. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  4714. locFactory.AddType(s_URI_1,s_TYPE_1,[]);
  4715. locFactory.AddType(s_URI_1,s_TYPE_2,[]);
  4716. locFactory.AddType(s_URI_1,s_TYPE_3,[]);
  4717. locFactory.addProperty(s_URI_1,s_TYPE_1,s_PROP_OBJ_REF,s_URI_1,s_TYPE_2,[]);
  4718. locFactory.addProperty(s_URI_1,s_TYPE_2,s_PROP_OBJ_REF,s_URI_1,s_TYPE_3,[]);
  4719. locA := locFactory.createNew(s_URI_1,s_TYPE_1);
  4720. locProp := locA.getProperty(s_PROP_OBJ_REF);
  4721. locRefList := TDataObjectObserverList.Create();
  4722. try
  4723. CheckEquals(0, locRefList.GetCount());
  4724. locRef := locRefList.Find(locA,locProp);
  4725. CheckEquals(PtrUInt(0), PtrUInt(locRef));
  4726. locRefList.Add(locA,locProp);
  4727. CheckEquals(1, locRefList.GetCount());
  4728. locRef := locRefList.Find(locA,locProp);
  4729. CheckNotEquals(PtrUInt(0), PtrUInt(locRef));
  4730. CheckEquals(PtrUInt(locA), PtrUInt(locRef.GetDataObject()));
  4731. CheckEquals(PtrUInt(locProp), PtrUInt(locRef.GetRefProperty()));
  4732. CheckEquals(PtrUInt(locRef), PtrUInt(locRefList.GetItem(0)));
  4733. locRefList.Add(locA,locProp);
  4734. CheckEquals(PtrUInt(locRef), PtrUInt(locRefList.Find(locA,locProp)));
  4735. CheckEquals(1, locRefList.GetCount());
  4736. locB := locFactory.createNew(s_URI_1,s_TYPE_2);
  4737. locPropB := locB.getProperty(s_PROP_OBJ_REF);
  4738. locRefList.Add(locB,locPropB);
  4739. CheckEquals(2, locRefList.GetCount());
  4740. locRef := locRefList.Find(locA,locProp);
  4741. CheckNotEquals(PtrUInt(0), PtrUInt(locRef));
  4742. CheckEquals(PtrUInt(locA), PtrUInt(locRef.GetDataObject()));
  4743. CheckEquals(PtrUInt(locProp), PtrUInt(locRef.GetRefProperty()));
  4744. locRef := locRefList.Find(locB,locPropB);
  4745. CheckNotEquals(PtrUInt(0), PtrUInt(locRef));
  4746. CheckEquals(PtrUInt(locB), PtrUInt(locRef.GetDataObject()));
  4747. CheckEquals(PtrUInt(locPropB), PtrUInt(locRef.GetRefProperty()));
  4748. finally
  4749. FreeAndNil(locRefList);
  4750. end;
  4751. end;
  4752. { TSDODataObject_Test }
  4753. class function TSDODataObject_Test.is_open_type() : Boolean;
  4754. begin
  4755. Result := False;
  4756. end;
  4757. { TSDOOpenedDataObject_Test }
  4758. procedure TSDOOpenedDataObject_Test.addProperty();
  4759. const
  4760. s_open_bool = 'open_bool_prop';
  4761. s_open_byte = 'open_byte_prop';
  4762. s_open_int = 'open_int_prop';
  4763. s_open_str = 'open_str_prop';
  4764. s_open_obj = 'open_obj_prop';
  4765. var
  4766. locO : ISDODataObject;
  4767. locOX : ISDODataObjectEx;
  4768. val_b : TSDOBoolean;
  4769. val_byte : TSDOByte;
  4770. val_i : TSDOInteger;
  4771. val_s : TSDOString;
  4772. val_o : ISDODataObject;
  4773. val_open_bool : TSDOBoolean;
  4774. val_open_byte : TSDOByte;
  4775. val_open_int : TSDOInteger;
  4776. val_open_str : TSDOString;
  4777. val_open_obj : ISDODataObject;
  4778. staticPropCount : PtrInt;
  4779. begin
  4780. Randomize();
  4781. val_b := ( ( RandomRange(-123,456) mod 3 ) = 0 );
  4782. val_byte := RandomRange(Low(TSDOByte),High(TSDOByte));
  4783. val_i := RandomRange(-123,456);
  4784. val_s := RandomString(123);
  4785. val_o := FFactory.createNew(s_URI_1,s_TYPE_2);
  4786. val_open_bool := ( ( RandomRange(-1234,4567) mod 2 ) = 0 );
  4787. val_open_byte := RandomRange(Low(TSDOByte),High(TSDOByte));
  4788. val_open_int := RandomRange(-12345,678910);
  4789. val_open_str := RandomString(1234);
  4790. val_open_obj := FFactory.createNew(s_URI_1,s_TYPE_2);
  4791. locO := Create_Object();
  4792. locO.setBoolean(s_PROP_BOOL_1,val_b);
  4793. locO.setByte(s_PROP_BYTE_1,val_byte);
  4794. locO.setInteger(s_PROP_INTEGER_1,val_i);
  4795. locO.setString(s_PROP_STR_1,val_s);
  4796. locO.setDataObject(s_PROP_OBJ_CONT,val_o);
  4797. locOX := locO as ISDODataObjectEx;
  4798. staticPropCount := locO.getInstanceProperties().getCount();
  4799. locOX.addProperty(s_open_int,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[IntegerType]),[]);
  4800. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  4801. check_property(locO.getInstanceProperties(), s_open_int, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[IntegerType]), []);
  4802. locO.setInteger(s_open_int,val_open_int);
  4803. CheckEquals(val_b, locO.getBoolean(s_PROP_BOOL_1), s_PROP_BOOL_1);
  4804. CheckEquals(val_i, locO.getInteger(s_PROP_INTEGER_1), s_PROP_INTEGER_1);
  4805. CheckEquals(val_s, locO.getString(s_PROP_STR_1), s_PROP_STR_1);
  4806. CheckEquals(PtrUInt(val_o), PtrUInt(locO.getDataObject(s_PROP_OBJ_CONT)), s_PROP_OBJ_CONT);
  4807. CheckEquals(val_open_int, locO.getInteger(s_open_int), s_open_int);
  4808. locOX.addProperty(s_open_bool,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[BooleanType]),[]);
  4809. CheckEquals( ( staticPropCount + 2), locO.getInstanceProperties().getCount(), 'Property count');
  4810. check_property(locO.getInstanceProperties(), s_open_bool, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[BooleanType]), []);
  4811. locOX.addProperty(s_open_str,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[StringType]),[]);
  4812. CheckEquals( ( staticPropCount + 3), locO.getInstanceProperties().getCount(), 'Property count');
  4813. check_property(locO.getInstanceProperties(), s_open_str, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[StringType]), []);
  4814. locO.setBoolean(s_open_bool,val_open_bool);
  4815. locO.setString(s_open_str,val_open_str);
  4816. CheckEquals(val_b, locO.getBoolean(s_PROP_BOOL_1), s_PROP_BOOL_1);
  4817. CheckEquals(val_i, locO.getInteger(s_PROP_INTEGER_1), s_PROP_INTEGER_1);
  4818. CheckEquals(val_s, locO.getString(s_PROP_STR_1), s_PROP_STR_1);
  4819. CheckEquals(PtrUInt(val_o), PtrUInt(locO.getDataObject(s_PROP_OBJ_CONT)), s_PROP_OBJ_CONT);
  4820. CheckEquals(val_open_str, locO.getString(s_open_str), s_open_str);
  4821. locOX.addProperty(s_open_obj,FFactory.getType(s_URI_1,s_TYPE_2),[]);
  4822. CheckEquals( ( staticPropCount + 4), locO.getInstanceProperties().getCount(), 'Property count');
  4823. check_property(locO.getInstanceProperties(), s_open_obj, FFactory.getType(s_URI_1,s_TYPE_2), []);
  4824. locO.setDataObject(s_open_obj,val_open_obj);
  4825. CheckEquals(val_b, locO.getBoolean(s_PROP_BOOL_1), s_PROP_BOOL_1);
  4826. CheckEquals(val_i, locO.getInteger(s_PROP_INTEGER_1), s_PROP_INTEGER_1);
  4827. CheckEquals(val_s, locO.getString(s_PROP_STR_1), s_PROP_STR_1);
  4828. CheckEquals(PtrUInt(val_o), PtrUInt(locO.getDataObject(s_PROP_OBJ_CONT)), s_PROP_OBJ_CONT);
  4829. CheckEquals(val_open_bool, locO.getBoolean(s_open_bool), s_open_bool);
  4830. CheckEquals(val_open_int, locO.getInteger(s_open_int), s_open_int);
  4831. CheckEquals(val_open_str, locO.getString(s_open_str), s_open_str);
  4832. CheckEquals(PtrUInt(val_open_obj), PtrUInt(locO.getDataObject(s_open_obj)), s_open_obj);
  4833. locOX.addProperty(s_open_byte,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ByteType]),[]);
  4834. CheckEquals( ( staticPropCount + 5), locO.getInstanceProperties().getCount(), 'Property count');
  4835. check_property(locO.getInstanceProperties(), s_open_byte, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ByteType]), []);
  4836. locO.setByte(s_open_byte,val_open_byte);
  4837. CheckEquals(val_b, locO.getBoolean(s_PROP_BOOL_1), s_PROP_BOOL_1);
  4838. CheckEquals(val_byte, locO.getByte(s_PROP_BYTE_1), s_PROP_BYTE_1);
  4839. CheckEquals(val_i, locO.getInteger(s_PROP_INTEGER_1), s_PROP_INTEGER_1);
  4840. CheckEquals(val_s, locO.getString(s_PROP_STR_1), s_PROP_STR_1);
  4841. CheckEquals(PtrUInt(val_o), PtrUInt(locO.getDataObject(s_PROP_OBJ_CONT)), s_PROP_OBJ_CONT);
  4842. CheckEquals(val_open_int, locO.getInteger(s_open_int), s_open_int);
  4843. CheckEquals(val_open_byte, locO.getByte(s_open_byte), s_open_byte);
  4844. end;
  4845. procedure TSDOOpenedDataObject_Test.addProperty_byte();
  4846. const
  4847. s_open_prop = 'open_prop';
  4848. s_static_prop = s_PROP_BYTE_1;
  4849. prop_type = ByteType;
  4850. var
  4851. locO : ISDODataObject;
  4852. locOX : ISDODataObjectEx;
  4853. locVal : TSDOByte;
  4854. val_open : TSDOByte;
  4855. staticPropCount : PtrInt;
  4856. begin
  4857. Randomize();
  4858. locVal := RandomRange(Low(TSDOByte),High(TSDOByte));
  4859. val_open := RandomRange(Low(TSDOByte),High(TSDOByte));
  4860. locO := Create_Object();
  4861. locOX := locO as ISDODataObjectEx;
  4862. locO.setByte(s_static_prop,locVal);
  4863. staticPropCount := locO.getInstanceProperties().getCount();
  4864. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  4865. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  4866. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  4867. locO.setByte(s_open_prop,val_open);
  4868. CheckEquals(locVal, locO.getByte(s_static_prop), s_static_prop);
  4869. CheckEquals(val_open, locO.getByte(s_open_prop), s_open_prop);
  4870. end;
  4871. procedure TSDOOpenedDataObject_Test.addProperty_date();
  4872. const
  4873. s_open_prop = 'open_prop';
  4874. s_static_prop = s_PROP_DATE_1;
  4875. prop_type = DateTimeType;
  4876. var
  4877. locO : ISDODataObject;
  4878. locOX : ISDODataObjectEx;
  4879. locVal : TSDODateTime;
  4880. val_open : TSDODateTime;
  4881. staticPropCount : PtrInt;
  4882. begin
  4883. Randomize();
  4884. locVal := RandomDate();
  4885. val_open := RandomDate();
  4886. locO := Create_Object();
  4887. locOX := locO as ISDODataObjectEx;
  4888. locO.setDate(s_static_prop,locVal);
  4889. staticPropCount := locO.getInstanceProperties().getCount();
  4890. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  4891. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  4892. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  4893. locO.setDate(s_open_prop,val_open);
  4894. CheckEquals(locVal, locO.getDate(s_static_prop), s_static_prop);
  4895. CheckEquals(val_open, locO.getDate(s_open_prop), s_open_prop);
  4896. end;
  4897. procedure TSDOOpenedDataObject_Test.addProperty_error();
  4898. const
  4899. s_open_bool = 'open_bool_prop';
  4900. s_open_byte = 'open_byte_prop';
  4901. s_open_int = 'open_int_prop';
  4902. s_open_str = 'open_str_prop';
  4903. s_open_obj = 'open_obj_prop';
  4904. var
  4905. locO : ISDODataObject;
  4906. locOX : ISDODataObjectEx;
  4907. procedure check_add_2_time(const AName : string; const AType : ISDOType; const AFlags : TPropertyFlags);
  4908. var
  4909. ok : boolean;
  4910. begin
  4911. locOX.addProperty(AName,AType,AFlags);
  4912. ok := False;
  4913. try
  4914. locOX.addProperty(AName,AType,AFlags);
  4915. except
  4916. on e : ESDODuplicatedItemException do
  4917. ok := True;
  4918. end;
  4919. CheckEquals(True, ok);
  4920. end;
  4921. begin
  4922. locO := Create_Object();
  4923. locOX := locO as ISDODataObjectEx;
  4924. check_add_2_time(s_open_int,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[IntegerType]),[]);
  4925. check_add_2_time(s_open_bool,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[BooleanType]),[]);
  4926. check_add_2_time(s_open_byte,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ByteType]),[]);
  4927. check_add_2_time(s_open_str,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[StringType]),[]);
  4928. check_add_2_time(s_open_obj,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]),[]);
  4929. end;
  4930. procedure TSDOOpenedDataObject_Test.addProperty_multi_value();
  4931. const
  4932. s_open_bool = 'open_bool_prop';
  4933. s_open_int = 'open_int_prop';
  4934. s_open_str = 'open_str_prop';
  4935. s_open_obj_cont = 'open_obj_prop_cont';
  4936. s_open_obj_ref = 'open_obj_prop_ref';
  4937. var
  4938. locO : ISDODataObject;
  4939. locOX : ISDODataObjectEx;
  4940. val_b : TSDOBoolean;
  4941. val_i : TSDOInteger;
  4942. val_s : TSDOString;
  4943. val_open_bool : array of TSDOBoolean;
  4944. val_open_int : array of TSDOInteger;
  4945. val_open_str : array of TSDOString;
  4946. val_open_obj_cont, val_open_obj_ref : array of ISDODataObject;
  4947. staticPropCount : PtrInt;
  4948. i, c : PtrInt;
  4949. ls : ISDODataObjectList;
  4950. begin
  4951. Randomize();
  4952. val_b := ( ( RandomRange(-123,456) mod 3 ) = 0 );
  4953. val_i := RandomRange(-123,456);
  4954. val_s := RandomString(123);
  4955. c := RandomRange(1,100);
  4956. SetLength(val_open_bool,c);
  4957. for i := 0 to Pred(Length(val_open_bool)) do
  4958. val_open_bool[i] := ( ( RandomRange(-1234,4567) mod 3 ) = 0 );
  4959. c := RandomRange(1,100);
  4960. SetLength(val_open_int,c);
  4961. for i := 0 to Pred(Length(val_open_int)) do
  4962. val_open_int[i] := RandomRange(-1234, 546789);
  4963. c := RandomRange(1,100);
  4964. SetLength(val_open_str,c);
  4965. for i := 0 to Pred(Length(val_open_str)) do
  4966. val_open_str[i] := RandomString(RandomRange(0,100));
  4967. c := RandomRange(1,100);
  4968. SetLength(val_open_obj_cont,c);
  4969. for i := 0 to Pred(Length(val_open_obj_cont)) do
  4970. val_open_obj_cont[i] := FFactory.createNew(s_URI_1,s_TYPE_2);
  4971. c := RandomRange(1,100);
  4972. SetLength(val_open_obj_ref,c);
  4973. for i := 0 to Pred(Length(val_open_obj_ref)) do
  4974. val_open_obj_ref[i] := FFactory.createNew(s_URI_1,s_TYPE_2);
  4975. try
  4976. locO := Create_Object();
  4977. locO.setBoolean(s_PROP_BOOL_1,val_b);
  4978. locO.setInteger(s_PROP_INTEGER_1,val_i);
  4979. locO.setString(s_PROP_STR_1,val_s);
  4980. locOX := locO as ISDODataObjectEx;
  4981. staticPropCount := locO.getInstanceProperties().getCount();
  4982. locOX.addProperty(s_open_int,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[IntegerType]),[pfIsMany]);
  4983. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  4984. check_property(locO.getInstanceProperties(), s_open_int, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[IntegerType]), [pfIsMany]);
  4985. ls := locO.getList(s_open_int);
  4986. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_int)');
  4987. for i := 0 to Pred(Length(val_open_int)) do
  4988. ls.append(val_open_int[i]);
  4989. CheckEquals(val_b, locO.getBoolean(s_PROP_BOOL_1), s_PROP_BOOL_1);
  4990. CheckEquals(val_i, locO.getInteger(s_PROP_INTEGER_1), s_PROP_INTEGER_1);
  4991. CheckEquals(val_s, locO.getString(s_PROP_STR_1), s_PROP_STR_1);
  4992. for i := 0 to Pred(Length(val_open_int)) do
  4993. CheckEquals(val_open_int[i], ls.getInteger(i), s_open_int);
  4994. locOX.addProperty(s_open_bool,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[BooleanType]),[pfIsMany]);
  4995. CheckEquals( ( staticPropCount + 2), locO.getInstanceProperties().getCount(), 'Property count');
  4996. check_property(locO.getInstanceProperties(), s_open_bool, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[BooleanType]), [pfIsMany]);
  4997. locOX.addProperty(s_open_str,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[StringType]),[pfIsMany]);
  4998. CheckEquals( ( staticPropCount + 3), locO.getInstanceProperties().getCount(), 'Property count');
  4999. check_property(locO.getInstanceProperties(), s_open_str, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[StringType]), [pfIsMany]);
  5000. locOX.addProperty(s_open_obj_cont,FFactory.getType(s_URI_1,s_TYPE_2),[pfIsMany,pfIsContainment]);
  5001. CheckEquals( ( staticPropCount + 4), locO.getInstanceProperties().getCount(), 'Property count');
  5002. check_property(locO.getInstanceProperties(), s_open_obj_cont, FFactory.getType(s_URI_1,s_TYPE_2), [pfIsMany,pfIsContainment]);
  5003. locOX.addProperty(s_open_obj_ref,FFactory.getType(s_URI_1,s_TYPE_2),[pfIsMany]);
  5004. CheckEquals( ( staticPropCount + 5), locO.getInstanceProperties().getCount(), 'Property count');
  5005. check_property(locO.getInstanceProperties(), s_open_obj_ref, FFactory.getType(s_URI_1,s_TYPE_2), [pfIsMany]);
  5006. ls := locO.getList(s_open_bool);
  5007. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_bool)');
  5008. for i := 0 to Pred(Length(val_open_bool)) do
  5009. ls.append(val_open_bool[i]);
  5010. ls := locO.getList(s_open_str);
  5011. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_str)');
  5012. for i := 0 to Pred(Length(val_open_str)) do
  5013. ls.append(val_open_str[i]);
  5014. ls := locO.getList(s_open_obj_cont);
  5015. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_obj_cont)');
  5016. for i := 0 to Pred(Length(val_open_obj_cont)) do
  5017. ls.append(val_open_obj_cont[i]);
  5018. ls := locO.getList(s_open_obj_ref);
  5019. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_obj_ref)');
  5020. for i := 0 to Pred(Length(val_open_obj_ref)) do
  5021. ls.append(val_open_obj_ref[i]);
  5022. CheckEquals(val_b, locO.getBoolean(s_PROP_BOOL_1), s_PROP_BOOL_1);
  5023. CheckEquals(val_i, locO.getInteger(s_PROP_INTEGER_1), s_PROP_INTEGER_1);
  5024. CheckEquals(val_s, locO.getString(s_PROP_STR_1), s_PROP_STR_1);
  5025. ls := locO.getList(s_open_bool);
  5026. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_bool)');
  5027. for i := 0 to Pred(Length(val_open_bool)) do
  5028. CheckEquals(val_open_bool[i], ls.getBoolean(i), s_open_bool);
  5029. ls := locO.getList(s_open_int);
  5030. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_int)');
  5031. for i := 0 to Pred(Length(val_open_int)) do
  5032. CheckEquals(val_open_int[i], ls.getInteger(i), s_open_int);
  5033. ls := locO.getList(s_open_str);
  5034. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_str)');
  5035. for i := 0 to Pred(Length(val_open_str)) do
  5036. CheckEquals(val_open_str[i], ls.getString(i), s_open_str);
  5037. ls := locO.getList(s_open_obj_ref);
  5038. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_obj_ref)');
  5039. for i := 0 to Pred(Length(val_open_obj_ref)) do begin
  5040. CheckEquals(PtrUInt(val_open_obj_ref[i]), PtrUInt(ls.getDataObject(i)), s_open_obj_ref);
  5041. CheckEquals(PtrUInt(nil), PtrUInt(ls.getDataObject(i).getContainer()), 'Containment, s_open_obj_ref');
  5042. end;
  5043. ls := locO.getList(s_open_obj_cont);
  5044. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_obj_cont)');
  5045. for i := 0 to Pred(Length(val_open_obj_cont)) do begin
  5046. CheckEquals(PtrUInt(val_open_obj_cont[i]), PtrUInt(ls.getDataObject(i)), s_open_obj_cont);
  5047. CheckEquals(PtrUInt(locO), PtrUInt(ls.getDataObject(i).getContainer()), 'Containment, s_open_obj_cont');
  5048. end;
  5049. finally
  5050. SetLength(val_open_obj_cont,0);
  5051. SetLength(val_open_obj_ref,0);
  5052. SetLength(val_open_str,0);
  5053. SetLength(val_open_int,0);
  5054. SetLength(val_open_bool,0);
  5055. end;
  5056. end;
  5057. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_byte();
  5058. const
  5059. s_open_prop = 'open_prop';
  5060. s_static_prop = s_PROP_BYTE_1;
  5061. item_data_type = ByteType;
  5062. var
  5063. locO : ISDODataObject;
  5064. locOX : ISDODataObjectEx;
  5065. val_static : TSDOByte;
  5066. val_open : array of TSDOByte;
  5067. staticPropCount : PtrInt;
  5068. i, c : PtrInt;
  5069. ls : ISDODataObjectList;
  5070. begin
  5071. Randomize();
  5072. val_static := RandomRange(Low(TSDOByte),High(TSDOByte));
  5073. c := RandomRange(1,100);
  5074. SetLength(val_open,c);
  5075. for i := 0 to Pred(Length(val_open)) do
  5076. val_open[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
  5077. try
  5078. locO := Create_Object();
  5079. locO.setByte(s_static_prop,val_static);
  5080. locOX := locO as ISDODataObjectEx;
  5081. staticPropCount := locO.getInstanceProperties().getCount();
  5082. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5083. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5084. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5085. ls := locO.getList(s_open_prop);
  5086. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5087. for i := 0 to Pred(Length(val_open)) do
  5088. ls.append(val_open[i]);
  5089. CheckEquals(val_static, locO.getByte(s_static_prop), s_static_prop);
  5090. for i := 0 to Pred(Length(val_open)) do
  5091. CheckEquals(val_open[i], ls.getByte(i), s_open_prop);
  5092. finally
  5093. SetLength(val_open,0);
  5094. end;
  5095. end;
  5096. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_date();
  5097. const
  5098. s_open_prop = 'open_prop';
  5099. s_static_prop = s_PROP_DATE_1;
  5100. item_data_type = DateTimeType;
  5101. var
  5102. locO : ISDODataObject;
  5103. locOX : ISDODataObjectEx;
  5104. val_static : TSDODateTime;
  5105. val_open : array of TSDODateTime;
  5106. staticPropCount : PtrInt;
  5107. i, c : PtrInt;
  5108. ls : ISDODataObjectList;
  5109. begin
  5110. Randomize();
  5111. val_static := RandomDate();
  5112. c := RandomRange(1,100);
  5113. SetLength(val_open,c);
  5114. for i := 0 to Pred(Length(val_open)) do
  5115. val_open[i] := RandomDate();
  5116. try
  5117. locO := Create_Object();
  5118. locO.setDate(s_static_prop,val_static);
  5119. locOX := locO as ISDODataObjectEx;
  5120. staticPropCount := locO.getInstanceProperties().getCount();
  5121. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5122. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5123. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5124. ls := locO.getList(s_open_prop);
  5125. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5126. for i := 0 to Pred(Length(val_open)) do
  5127. ls.append(val_open[i]);
  5128. CheckEquals(val_static, locO.getDate(s_static_prop), s_static_prop);
  5129. for i := 0 to Pred(Length(val_open)) do
  5130. CheckEquals(val_open[i], ls.getDate(i), s_open_prop);
  5131. finally
  5132. SetLength(val_open,0);
  5133. end;
  5134. end;
  5135. procedure TSDOOpenedDataObject_Test.check_property(
  5136. const APropList: ISDOPropertyList; const AName: string;
  5137. const AType: ISDOType; const AFlags: TPropertyFlags
  5138. );
  5139. var
  5140. pp : ISDOProperty;
  5141. begin
  5142. pp := APropList.find(AName);
  5143. CheckNotEquals(PtrUInt(nil), PtrUInt(pp), Format('Property not found : "%s".',[AName]));
  5144. CheckEquals(AName, pp.getName());
  5145. Check(AType.equals(pp.getType()), Format('Property type differs : "%s".',[AName]));
  5146. CheckEquals((pfIsMany in AFlags), pp.isMany(), Format('Property isMany differs : "%s".',[AName]));
  5147. CheckEquals((pfIsReadOnly in AFlags), pp.isReadOnly(), Format('Property isReadOnly differs : "%s".',[AName]));
  5148. CheckEquals((pfIsContainment in AFlags), pp.isContainment(), Format('Property isContainment differs : "%s".',[AName]));
  5149. end;
  5150. procedure TSDOOpenedDataObject_Test.implicit_add_property();
  5151. const
  5152. s_open_bool = 'open_bool_prop';
  5153. s_open_int = 'open_int_prop';
  5154. s_open_str = 'open_str_prop';
  5155. s_open_obj_cont = 'open_obj_prop_cont';
  5156. s_open_obj_ref = 'open_obj_prop_ref';
  5157. var
  5158. locO : ISDODataObject;
  5159. val_b : TSDOBoolean;
  5160. val_i : TSDOInteger;
  5161. val_s : TSDOString;
  5162. val_o : ISDODataObject;
  5163. val_open_bool : TSDOBoolean;
  5164. val_open_int : TSDOInteger;
  5165. val_open_str : TSDOString;
  5166. val_open_obj_cont, val_open_obj_ref : ISDODataObject;
  5167. staticPropCount : PtrInt;
  5168. begin
  5169. Randomize();
  5170. val_b := ( ( RandomRange(-123,456) mod 3 ) = 0 );
  5171. val_i := RandomRange(-123,456);
  5172. val_s := RandomString(123);
  5173. val_o := FFactory.createNew(s_URI_1,s_TYPE_2);
  5174. val_open_bool := ( ( RandomRange(-1234,4567) mod 2 ) = 0 );
  5175. val_open_int := RandomRange(-12345,678910);
  5176. val_open_str := RandomString(1234);
  5177. val_open_obj_cont := FFactory.createNew(s_URI_1,s_TYPE_2);
  5178. val_open_obj_ref := val_o;
  5179. locO := Create_Object();
  5180. locO.setBoolean(s_PROP_BOOL_1,val_b);
  5181. locO.setInteger(s_PROP_INTEGER_1,val_i);
  5182. locO.setString(s_PROP_STR_1,val_s);
  5183. locO.setDataObject(s_PROP_OBJ_CONT,val_o);
  5184. staticPropCount := locO.getInstanceProperties().getCount();
  5185. locO.setInteger(s_open_int,val_open_int);
  5186. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5187. check_property(locO.getInstanceProperties(), s_open_int, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[IntegerType]), []);
  5188. CheckEquals(val_b, locO.getBoolean(s_PROP_BOOL_1), s_PROP_BOOL_1);
  5189. CheckEquals(val_i, locO.getInteger(s_PROP_INTEGER_1), s_PROP_INTEGER_1);
  5190. CheckEquals(val_s, locO.getString(s_PROP_STR_1), s_PROP_STR_1);
  5191. CheckEquals(PtrUInt(val_o), PtrUInt(locO.getDataObject(s_PROP_OBJ_CONT)), s_PROP_OBJ_CONT);
  5192. CheckEquals(val_open_int, locO.getInteger(s_open_int), s_open_int);
  5193. locO.setBoolean(s_open_bool,val_open_bool);
  5194. CheckEquals( ( staticPropCount + 2), locO.getInstanceProperties().getCount(), 'Property count');
  5195. check_property(locO.getInstanceProperties(), s_open_bool, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[BooleanType]), []);
  5196. locO.setString(s_open_str,val_open_str);
  5197. CheckEquals( ( staticPropCount + 3), locO.getInstanceProperties().getCount(), 'Property count');
  5198. check_property(locO.getInstanceProperties(), s_open_str, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[StringType]), []);
  5199. locO.setDataObject(s_open_obj_cont,val_open_obj_cont);
  5200. CheckEquals( ( staticPropCount + 4), locO.getInstanceProperties().getCount(), 'Property count');
  5201. check_property(locO.getInstanceProperties(), s_open_obj_cont, FFactory.getType(s_URI_1,s_TYPE_2), [pfIsContainment]);
  5202. locO.setDataObject(s_open_obj_ref,val_open_obj_ref);
  5203. CheckEquals( ( staticPropCount + 5), locO.getInstanceProperties().getCount(), 'Property count');
  5204. check_property(locO.getInstanceProperties(), s_open_obj_ref, FFactory.getType(s_URI_1,s_TYPE_2), []);
  5205. CheckEquals(val_b, locO.getBoolean(s_PROP_BOOL_1), s_PROP_BOOL_1);
  5206. CheckEquals(val_i, locO.getInteger(s_PROP_INTEGER_1), s_PROP_INTEGER_1);
  5207. CheckEquals(val_s, locO.getString(s_PROP_STR_1), s_PROP_STR_1);
  5208. CheckEquals(PtrUInt(val_o), PtrUInt(locO.getDataObject(s_PROP_OBJ_CONT)), s_PROP_OBJ_CONT);
  5209. CheckEquals(val_open_bool, locO.getBoolean(s_open_bool), s_open_bool);
  5210. CheckEquals(val_open_int, locO.getInteger(s_open_int), s_open_int);
  5211. CheckEquals(val_open_str, locO.getString(s_open_str), s_open_str);
  5212. CheckEquals(PtrUInt(val_open_obj_cont), PtrUInt(locO.getDataObject(s_open_obj_cont)), s_open_obj_cont);
  5213. CheckEquals(PtrUInt(val_open_obj_ref), PtrUInt(locO.getDataObject(s_open_obj_ref)), s_open_obj_ref);
  5214. end;
  5215. procedure TSDOOpenedDataObject_Test.implicit_add_property_byte();
  5216. const
  5217. s_static_prop = s_PROP_BYTE_1;
  5218. s_open_prop = 'open_prop';
  5219. var
  5220. locO : ISDODataObject;
  5221. val_static : TSDOByte;
  5222. val_open : TSDOByte;
  5223. staticPropCount : PtrInt;
  5224. begin
  5225. Randomize();
  5226. val_static := RandomRange(Low(TSDOByte),High(TSDOByte));
  5227. val_open := RandomRange(Low(TSDOByte),High(TSDOByte));
  5228. locO := Create_Object();
  5229. locO.setByte(s_static_prop,val_static);
  5230. staticPropCount := locO.getInstanceProperties().getCount();
  5231. locO.setByte(s_open_prop,val_open);
  5232. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5233. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ByteType]), []);
  5234. CheckEquals(val_static, locO.getByte(s_static_prop), s_static_prop);
  5235. CheckEquals(val_open, locO.getByte(s_open_prop), s_open_prop);
  5236. end;
  5237. procedure TSDOOpenedDataObject_Test.implicit_add_property_date();
  5238. const
  5239. s_static_prop = s_PROP_DATE_1;
  5240. s_open_prop = 'open_prop';
  5241. var
  5242. locO : ISDODataObject;
  5243. val_static, val_open : TSDODateTime;
  5244. staticPropCount : PtrInt;
  5245. begin
  5246. Randomize();
  5247. val_static := RandomDate();
  5248. val_open := RandomDate();
  5249. locO := Create_Object();
  5250. locO.setDate(s_static_prop,val_static);
  5251. staticPropCount := locO.getInstanceProperties().getCount();
  5252. locO.setDate(s_open_prop,val_open);
  5253. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5254. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[DateType]), []);
  5255. CheckEquals(val_static, locO.getDate(s_static_prop), s_static_prop);
  5256. CheckEquals(val_open, locO.getDate(s_open_prop), s_open_prop);
  5257. end;
  5258. {$IFDEF HAS_SDO_BYTES}
  5259. procedure TSDOOpenedDataObject_Test.addProperty_bytes();
  5260. const
  5261. s_open_prop = 'open_prop';
  5262. s_static_prop = s_PROP_BYTES_1;
  5263. prop_type = BytesType;
  5264. var
  5265. locVal : TSDOBytes;
  5266. val_open : TSDOBytes;
  5267. procedure SetConstants();
  5268. var
  5269. v : TSDOBytes;
  5270. k : Integer;
  5271. begin
  5272. SetLength(v,100);
  5273. for k := 0 to High(v) do
  5274. v[k] := k mod High(Byte);
  5275. locVal := v;
  5276. v := nil;
  5277. SetLength(v,200);
  5278. for k := 0 to High(v) do
  5279. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5280. val_open := v;
  5281. end;
  5282. var
  5283. locO : ISDODataObject;
  5284. locOX : ISDODataObjectEx;
  5285. staticPropCount : PtrInt;
  5286. begin
  5287. Randomize();
  5288. SetConstants();
  5289. locO := Create_Object();
  5290. locOX := locO as ISDODataObjectEx;
  5291. locO.setBytes(s_static_prop,locVal);
  5292. staticPropCount := locO.getInstanceProperties().getCount();
  5293. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  5294. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5295. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  5296. locO.setBytes(s_open_prop,val_open);
  5297. CheckEquals(locVal, locO.getBytes(s_static_prop), s_static_prop);
  5298. CheckEquals(val_open, locO.getBytes(s_open_prop), s_open_prop);
  5299. end;
  5300. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_bytes();
  5301. const
  5302. s_open_prop = 'open_prop';
  5303. s_static_prop = s_PROP_BYTES_1;
  5304. item_data_type = BytesType;
  5305. var
  5306. val_static : TSDOBytes;
  5307. val_open : array of TSDOBytes;
  5308. procedure SetConstants();
  5309. var
  5310. v, e : TSDOBytes;
  5311. k, h : Integer;
  5312. begin
  5313. SetLength(v,100);
  5314. for k := 0 to High(v) do
  5315. v[k] := k mod High(Byte);
  5316. val_static := v;
  5317. v := nil;
  5318. SetLength(val_open,123);
  5319. for k := 0 to High(val_open) do begin
  5320. e := nil;
  5321. SetLength(e,RandomRange(0,1000));
  5322. if ( Length(e) > 0 ) then begin
  5323. for h := Low(e) to High(e) do
  5324. e[h] := RandomRange(Low(Byte),High(Byte));
  5325. end;
  5326. val_open[k] := e;
  5327. end;
  5328. end;
  5329. var
  5330. locO : ISDODataObject;
  5331. locOX : ISDODataObjectEx;
  5332. staticPropCount : PtrInt;
  5333. i : PtrInt;
  5334. ls : ISDODataObjectList;
  5335. begin
  5336. Randomize();
  5337. SetConstants();
  5338. try
  5339. locO := Create_Object();
  5340. locO.setBytes(s_static_prop,val_static);
  5341. locOX := locO as ISDODataObjectEx;
  5342. staticPropCount := locO.getInstanceProperties().getCount();
  5343. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5344. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5345. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5346. ls := locO.getList(s_open_prop);
  5347. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5348. for i := 0 to Pred(Length(val_open)) do
  5349. ls.appendBytes(val_open[i]);
  5350. CheckEquals(val_static, locO.getBytes(s_static_prop), s_static_prop);
  5351. for i := 0 to Pred(Length(val_open)) do
  5352. CheckEquals(val_open[i], ls.getBytes(i), s_open_prop);
  5353. finally
  5354. SetLength(val_open,0);
  5355. end;
  5356. end;
  5357. procedure TSDOOpenedDataObject_Test.implicit_add_property_bytes();
  5358. const
  5359. s_static_prop = s_PROP_BYTES_1;
  5360. s_open_prop = 'open_prop';
  5361. var
  5362. val_open, val_static : TSDOBytes;
  5363. procedure SetConstants();
  5364. var
  5365. v : TSDOBytes;
  5366. k : Integer;
  5367. begin
  5368. SetLength(v,100);
  5369. for k := 0 to High(v) do
  5370. v[k] := k mod High(Byte);
  5371. val_open := v;
  5372. v := nil;
  5373. SetLength(v,200);
  5374. for k := 0 to High(v) do
  5375. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5376. val_static := v;
  5377. end;
  5378. var
  5379. locO : ISDODataObject;
  5380. staticPropCount : PtrInt;
  5381. begin
  5382. Randomize();
  5383. SetConstants();
  5384. locO := Create_Object();
  5385. locO.setBytes(s_static_prop,val_static);
  5386. staticPropCount := locO.getInstanceProperties().getCount();
  5387. locO.setBytes(s_open_prop,val_open);
  5388. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5389. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[BytesType]), []);
  5390. CheckEquals(val_static, locO.getBytes(s_static_prop), s_static_prop);
  5391. CheckEquals(val_open, locO.getBytes(s_open_prop), s_open_prop);
  5392. end;
  5393. {$ENDIF HAS_SDO_BYTES}
  5394. {$IFDEF HAS_SDO_CHAR}
  5395. procedure TSDOOpenedDataObject_Test.addProperty_char();
  5396. const
  5397. s_open_prop = 'open_prop';
  5398. s_static_prop = s_PROP_CHAR_1;
  5399. prop_type = CharacterType;
  5400. var
  5401. locO : ISDODataObject;
  5402. locOX : ISDODataObjectEx;
  5403. locVal : TSDOChar;
  5404. val_open : TSDOChar;
  5405. staticPropCount : PtrInt;
  5406. begin
  5407. Randomize();
  5408. locVal := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  5409. val_open := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  5410. locO := Create_Object();
  5411. locOX := locO as ISDODataObjectEx;
  5412. locO.setCharacter(s_static_prop,locVal);
  5413. staticPropCount := locO.getInstanceProperties().getCount();
  5414. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  5415. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5416. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  5417. locO.setCharacter(s_open_prop,val_open);
  5418. CheckEquals(locVal, locO.getCharacter(s_static_prop), s_static_prop);
  5419. CheckEquals(val_open, locO.getCharacter(s_open_prop), s_open_prop);
  5420. end;
  5421. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_char();
  5422. const
  5423. s_open_prop = 'open_prop';
  5424. s_static_prop = s_PROP_CHAR_1;
  5425. item_data_type = CharacterType;
  5426. var
  5427. locO : ISDODataObject;
  5428. locOX : ISDODataObjectEx;
  5429. val_static : TSDOChar;
  5430. val_open : array of TSDOChar;
  5431. staticPropCount : PtrInt;
  5432. i, c : PtrInt;
  5433. ls : ISDODataObjectList;
  5434. begin
  5435. Randomize();
  5436. val_static := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  5437. c := RandomRange(1,100);
  5438. SetLength(val_open,c);
  5439. for i := 0 to Pred(Length(val_open)) do
  5440. val_open[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  5441. try
  5442. locO := Create_Object();
  5443. locO.setCharacter(s_static_prop,val_static);
  5444. locOX := locO as ISDODataObjectEx;
  5445. staticPropCount := locO.getInstanceProperties().getCount();
  5446. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5447. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5448. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5449. ls := locO.getList(s_open_prop);
  5450. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5451. for i := 0 to Pred(Length(val_open)) do
  5452. ls.append(val_open[i]);
  5453. CheckEquals(val_static, locO.getCharacter(s_static_prop), s_static_prop);
  5454. for i := 0 to Pred(Length(val_open)) do
  5455. CheckEquals(val_open[i], ls.getCharacter(i), s_open_prop);
  5456. finally
  5457. SetLength(val_open,0);
  5458. end;
  5459. end;
  5460. procedure TSDOOpenedDataObject_Test.implicit_add_property_char();
  5461. const
  5462. s_static_prop = s_PROP_CHAR_1;
  5463. s_open_prop = 'open_prop';
  5464. var
  5465. locO : ISDODataObject;
  5466. val_static : TSDOChar;
  5467. val_open : TSDOChar;
  5468. staticPropCount : PtrInt;
  5469. begin
  5470. Randomize();
  5471. val_static := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  5472. val_open := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
  5473. locO := Create_Object();
  5474. locO.setCharacter(s_static_prop,val_static);
  5475. staticPropCount := locO.getInstanceProperties().getCount();
  5476. locO.setCharacter(s_open_prop,val_open);
  5477. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5478. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[CharacterType]), []);
  5479. CheckEquals(val_static, locO.getCharacter(s_static_prop), s_static_prop);
  5480. CheckEquals(val_open, locO.getCharacter(s_open_prop), s_open_prop);
  5481. end;
  5482. {$ENDIF HAS_SDO_CHAR}
  5483. {$IFDEF HAS_SDO_CURRENCY}
  5484. procedure TSDOOpenedDataObject_Test.addProperty_currency();
  5485. const
  5486. s_open_prop = 'open_prop';
  5487. s_static_prop = s_PROP_CURRENCY_1;
  5488. prop_type = CurrencyType;
  5489. var
  5490. locO : ISDODataObject;
  5491. locOX : ISDODataObjectEx;
  5492. locVal : TSDOCurrency;
  5493. val_open : TSDOCurrency;
  5494. staticPropCount : PtrInt;
  5495. begin
  5496. Randomize();
  5497. locVal := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5498. val_open := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5499. locO := Create_Object();
  5500. locOX := locO as ISDODataObjectEx;
  5501. locO.setCurrency(s_static_prop,locVal);
  5502. staticPropCount := locO.getInstanceProperties().getCount();
  5503. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  5504. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5505. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  5506. locO.setCurrency(s_open_prop,val_open);
  5507. CheckEqualsCurrency(locVal, locO.getCurrency(s_static_prop), s_static_prop);
  5508. CheckEqualsCurrency(val_open, locO.getCurrency(s_open_prop), s_open_prop);
  5509. end;
  5510. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_currency();
  5511. const
  5512. s_open_prop = 'open_prop';
  5513. s_static_prop = s_PROP_CURRENCY_1;
  5514. item_data_type = CurrencyType;
  5515. var
  5516. locO : ISDODataObject;
  5517. locOX : ISDODataObjectEx;
  5518. val_static : TSDOCurrency;
  5519. val_open : array of TSDOCurrency;
  5520. staticPropCount : PtrInt;
  5521. i, c : PtrInt;
  5522. ls : ISDODataObjectList;
  5523. begin
  5524. Randomize();
  5525. val_static := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5526. c := RandomRange(1,100);
  5527. SetLength(val_open,c);
  5528. for i := 0 to Pred(Length(val_open)) do
  5529. val_open[i] := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5530. try
  5531. locO := Create_Object();
  5532. locO.setCurrency(s_static_prop,val_static);
  5533. locOX := locO as ISDODataObjectEx;
  5534. staticPropCount := locO.getInstanceProperties().getCount();
  5535. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5536. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5537. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5538. ls := locO.getList(s_open_prop);
  5539. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5540. for i := 0 to Pred(Length(val_open)) do
  5541. ls.appendCurrency(val_open[i]);
  5542. CheckEquals(val_static, locO.getCurrency(s_static_prop), s_static_prop);
  5543. for i := 0 to Pred(Length(val_open)) do
  5544. CheckEquals(val_open[i], ls.getCurrency(i), s_open_prop);
  5545. finally
  5546. SetLength(val_open,0);
  5547. end;
  5548. end;
  5549. procedure TSDOOpenedDataObject_Test.implicit_add_property_currency();
  5550. const
  5551. s_static_prop = s_PROP_CURRENCY_1;
  5552. s_open_prop = 'open_prop';
  5553. var
  5554. locO : ISDODataObject;
  5555. val_static : TSDOCurrency;
  5556. val_open : TSDOCurrency;
  5557. staticPropCount : PtrInt;
  5558. begin
  5559. Randomize();
  5560. val_static := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5561. val_open := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5562. locO := Create_Object();
  5563. locO.setCurrency(s_static_prop,val_static);
  5564. staticPropCount := locO.getInstanceProperties().getCount();
  5565. locO.setCurrency(s_open_prop,val_open);
  5566. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5567. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType]), []);
  5568. CheckEquals(val_static, locO.getCurrency(s_static_prop), s_static_prop);
  5569. CheckEquals(val_open, locO.getCurrency(s_open_prop), s_open_prop);
  5570. end;
  5571. {$ENDIF HAS_SDO_CURRENCY}
  5572. {$IFDEF HAS_SDO_DOUBLE}
  5573. procedure TSDOOpenedDataObject_Test.addProperty_double();
  5574. const
  5575. s_open_prop = 'open_prop';
  5576. s_static_prop = s_PROP_DOUBLE_1;
  5577. prop_type = DoubleType;
  5578. var
  5579. locO : ISDODataObject;
  5580. locOX : ISDODataObjectEx;
  5581. locVal : TSDODouble;
  5582. val_open : TSDODouble;
  5583. staticPropCount : PtrInt;
  5584. begin
  5585. Randomize();
  5586. locVal := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5587. val_open := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5588. locO := Create_Object();
  5589. locOX := locO as ISDODataObjectEx;
  5590. locO.setDouble(s_static_prop,locVal);
  5591. staticPropCount := locO.getInstanceProperties().getCount();
  5592. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  5593. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5594. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  5595. locO.setDouble(s_open_prop,val_open);
  5596. CheckEquals(locVal, locO.getDouble(s_static_prop), s_static_prop);
  5597. CheckEquals(val_open, locO.getDouble(s_open_prop), s_open_prop);
  5598. end;
  5599. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_double();
  5600. const
  5601. s_open_prop = 'open_prop';
  5602. s_static_prop = s_PROP_DOUBLE_1;
  5603. item_data_type = DoubleType;
  5604. var
  5605. locO : ISDODataObject;
  5606. locOX : ISDODataObjectEx;
  5607. val_static : TSDODouble;
  5608. val_open : array of TSDODouble;
  5609. staticPropCount : PtrInt;
  5610. i, c : PtrInt;
  5611. ls : ISDODataObjectList;
  5612. begin
  5613. Randomize();
  5614. val_static := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5615. c := RandomRange(1,100);
  5616. SetLength(val_open,c);
  5617. for i := 0 to Pred(Length(val_open)) do
  5618. val_open[i] := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5619. try
  5620. locO := Create_Object();
  5621. locO.setDouble(s_static_prop,val_static);
  5622. locOX := locO as ISDODataObjectEx;
  5623. staticPropCount := locO.getInstanceProperties().getCount();
  5624. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5625. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5626. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5627. ls := locO.getList(s_open_prop);
  5628. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5629. for i := 0 to Pred(Length(val_open)) do
  5630. ls.append(val_open[i]);
  5631. CheckEquals(val_static, locO.getDouble(s_static_prop), s_static_prop);
  5632. for i := 0 to Pred(Length(val_open)) do
  5633. CheckEquals(val_open[i], ls.getDouble(i), s_open_prop);
  5634. finally
  5635. SetLength(val_open,0);
  5636. end;
  5637. end;
  5638. procedure TSDOOpenedDataObject_Test.implicit_add_property_double();
  5639. const
  5640. s_static_prop = s_PROP_DOUBLE_1;
  5641. s_open_prop = 'open_prop';
  5642. var
  5643. locO : ISDODataObject;
  5644. val_static : TSDODouble;
  5645. val_open : TSDODouble;
  5646. staticPropCount : PtrInt;
  5647. begin
  5648. Randomize();
  5649. val_static := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5650. val_open := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5651. locO := Create_Object();
  5652. locO.setDouble(s_static_prop,val_static);
  5653. staticPropCount := locO.getInstanceProperties().getCount();
  5654. locO.setDouble(s_open_prop,val_open);
  5655. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5656. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[DoubleType]), []);
  5657. CheckEquals(val_static, locO.getDouble(s_static_prop), s_static_prop);
  5658. CheckEquals(val_open, locO.getDouble(s_open_prop), s_open_prop);
  5659. end;
  5660. {$ENDIF HAS_SDO_DOUBLE}
  5661. {$IFDEF HAS_SDO_FLOAT}
  5662. procedure TSDOOpenedDataObject_Test.addProperty_float();
  5663. const
  5664. s_open_prop = 'open_prop';
  5665. s_static_prop = s_PROP_FLOAT_1;
  5666. prop_type = FloatType;
  5667. var
  5668. locO : ISDODataObject;
  5669. locOX : ISDODataObjectEx;
  5670. locVal : TSDOFloat;
  5671. val_open : TSDOFloat;
  5672. staticPropCount : PtrInt;
  5673. begin
  5674. Randomize();
  5675. locVal := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5676. val_open := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5677. locO := Create_Object();
  5678. locOX := locO as ISDODataObjectEx;
  5679. locO.setFloat(s_static_prop,locVal);
  5680. staticPropCount := locO.getInstanceProperties().getCount();
  5681. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  5682. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5683. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  5684. locO.setFloat(s_open_prop,val_open);
  5685. CheckEquals(locVal, locO.getFloat(s_static_prop), s_static_prop);
  5686. CheckEquals(val_open, locO.getFloat(s_open_prop), s_open_prop);
  5687. end;
  5688. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_float();
  5689. const
  5690. s_open_prop = 'open_prop';
  5691. s_static_prop = s_PROP_FLOAT_1;
  5692. item_data_type = FloatType;
  5693. var
  5694. locO : ISDODataObject;
  5695. locOX : ISDODataObjectEx;
  5696. val_static : TSDOFloat;
  5697. val_open : array of TSDOFloat;
  5698. staticPropCount : PtrInt;
  5699. i, c : PtrInt;
  5700. ls : ISDODataObjectList;
  5701. begin
  5702. Randomize();
  5703. val_static := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5704. c := RandomRange(1,100);
  5705. SetLength(val_open,c);
  5706. for i := 0 to Pred(Length(val_open)) do
  5707. val_open[i] := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5708. try
  5709. locO := Create_Object();
  5710. locO.setFloat(s_static_prop,val_static);
  5711. locOX := locO as ISDODataObjectEx;
  5712. staticPropCount := locO.getInstanceProperties().getCount();
  5713. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5714. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5715. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5716. ls := locO.getList(s_open_prop);
  5717. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5718. for i := 0 to Pred(Length(val_open)) do
  5719. ls.append(val_open[i]);
  5720. CheckEquals(val_static, locO.getFloat(s_static_prop), s_static_prop);
  5721. for i := 0 to Pred(Length(val_open)) do
  5722. CheckEquals(val_open[i], ls.getFloat(i), s_open_prop);
  5723. finally
  5724. SetLength(val_open,0);
  5725. end;
  5726. end;
  5727. procedure TSDOOpenedDataObject_Test.implicit_add_property_float();
  5728. const
  5729. s_static_prop = s_PROP_FLOAT_1;
  5730. s_open_prop = 'open_prop';
  5731. var
  5732. locO : ISDODataObject;
  5733. val_static : TSDOFloat;
  5734. val_open : TSDOFloat;
  5735. staticPropCount : PtrInt;
  5736. begin
  5737. Randomize();
  5738. val_static := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5739. val_open := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5740. locO := Create_Object();
  5741. locO.setFloat(s_static_prop,val_static);
  5742. staticPropCount := locO.getInstanceProperties().getCount();
  5743. locO.setFloat(s_open_prop,val_open);
  5744. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5745. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[FloatType]), []);
  5746. CheckEquals(val_static, locO.getFloat(s_static_prop), s_static_prop);
  5747. CheckEquals(val_open, locO.getFloat(s_open_prop), s_open_prop);
  5748. end;
  5749. {$ENDIF HAS_SDO_FLOAT}
  5750. {$IFDEF HAS_SDO_LONG}
  5751. procedure TSDOOpenedDataObject_Test.addProperty_long();
  5752. const
  5753. s_open_prop = 'open_prop';
  5754. s_static_prop = s_PROP_LONG_1;
  5755. prop_type = LongType;
  5756. var
  5757. locO : ISDODataObject;
  5758. locOX : ISDODataObjectEx;
  5759. locVal : TSDOLong;
  5760. val_open : TSDOLong;
  5761. staticPropCount : PtrInt;
  5762. begin
  5763. Randomize();
  5764. locVal := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5765. val_open := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5766. locO := Create_Object();
  5767. locOX := locO as ISDODataObjectEx;
  5768. locO.setLong(s_static_prop,locVal);
  5769. staticPropCount := locO.getInstanceProperties().getCount();
  5770. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  5771. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5772. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  5773. locO.setLong(s_open_prop,val_open);
  5774. CheckEquals(locVal, locO.getLong(s_static_prop), s_static_prop);
  5775. CheckEquals(val_open, locO.getLong(s_open_prop), s_open_prop);
  5776. end;
  5777. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_long();
  5778. const
  5779. s_open_prop = 'open_prop';
  5780. s_static_prop = s_PROP_LONG_1;
  5781. item_data_type = LongType;
  5782. var
  5783. locO : ISDODataObject;
  5784. locOX : ISDODataObjectEx;
  5785. val_static : TSDOLong;
  5786. val_open : array of TSDOLong;
  5787. staticPropCount : PtrInt;
  5788. i, c : PtrInt;
  5789. ls : ISDODataObjectList;
  5790. begin
  5791. Randomize();
  5792. val_static := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5793. c := RandomRange(1,100);
  5794. SetLength(val_open,c);
  5795. for i := 0 to Pred(Length(val_open)) do
  5796. val_open[i] := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5797. try
  5798. locO := Create_Object();
  5799. locO.setLong(s_static_prop,val_static);
  5800. locOX := locO as ISDODataObjectEx;
  5801. staticPropCount := locO.getInstanceProperties().getCount();
  5802. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5803. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5804. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5805. ls := locO.getList(s_open_prop);
  5806. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5807. for i := 0 to Pred(Length(val_open)) do
  5808. ls.append(val_open[i]);
  5809. CheckEquals(val_static, locO.getLong(s_static_prop), s_static_prop);
  5810. for i := 0 to Pred(Length(val_open)) do
  5811. CheckEquals(val_open[i], ls.getLong(i), s_open_prop);
  5812. finally
  5813. SetLength(val_open,0);
  5814. end;
  5815. end;
  5816. procedure TSDOOpenedDataObject_Test.implicit_add_property_long();
  5817. const
  5818. s_static_prop = s_PROP_LONG_1;
  5819. s_open_prop = 'open_prop';
  5820. var
  5821. locO : ISDODataObject;
  5822. val_static : TSDOLong;
  5823. val_open : TSDOLong;
  5824. staticPropCount : PtrInt;
  5825. begin
  5826. Randomize();
  5827. val_static := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5828. val_open := RandomRange(Low(TSDOInteger),High(TSDOInteger));
  5829. locO := Create_Object();
  5830. locO.setLong(s_static_prop,val_static);
  5831. staticPropCount := locO.getInstanceProperties().getCount();
  5832. locO.setLong(s_open_prop,val_open);
  5833. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5834. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[LongType]), []);
  5835. CheckEquals(val_static, locO.getLong(s_static_prop), s_static_prop);
  5836. CheckEquals(val_open, locO.getLong(s_open_prop), s_open_prop);
  5837. end;
  5838. {$ENDIF HAS_SDO_LONG}
  5839. {$IFDEF HAS_SDO_SHORT}
  5840. procedure TSDOOpenedDataObject_Test.addProperty_short();
  5841. const
  5842. s_open_prop = 'open_prop';
  5843. s_static_prop = s_PROP_SHORT_1;
  5844. prop_type = ShortType;
  5845. var
  5846. locO : ISDODataObject;
  5847. locOX : ISDODataObjectEx;
  5848. locVal : TSDOShort;
  5849. val_open : TSDOShort;
  5850. staticPropCount : PtrInt;
  5851. begin
  5852. Randomize();
  5853. locVal := RandomRange(Low(TSDOShort),High(TSDOShort));
  5854. val_open := RandomRange(Low(TSDOShort),High(TSDOShort));
  5855. locO := Create_Object();
  5856. locOX := locO as ISDODataObjectEx;
  5857. locO.setShort(s_static_prop,locVal);
  5858. staticPropCount := locO.getInstanceProperties().getCount();
  5859. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]),[]);
  5860. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5861. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[prop_type]), []);
  5862. locO.setShort(s_open_prop,val_open);
  5863. CheckEquals(locVal, locO.getShort(s_static_prop), s_static_prop);
  5864. CheckEquals(val_open, locO.getShort(s_open_prop), s_open_prop);
  5865. end;
  5866. procedure TSDOOpenedDataObject_Test.addProperty_multi_value_short();
  5867. const
  5868. s_open_prop = 'open_prop';
  5869. s_static_prop = s_PROP_SHORT_1;
  5870. item_data_type = ShortType;
  5871. var
  5872. locO : ISDODataObject;
  5873. locOX : ISDODataObjectEx;
  5874. val_static : TSDOShort;
  5875. val_open : array of TSDOShort;
  5876. staticPropCount : PtrInt;
  5877. i, c : PtrInt;
  5878. ls : ISDODataObjectList;
  5879. begin
  5880. Randomize();
  5881. val_static := RandomRange(Low(TSDOShort),High(TSDOShort));
  5882. c := RandomRange(1,100);
  5883. SetLength(val_open,c);
  5884. for i := 0 to Pred(Length(val_open)) do
  5885. val_open[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
  5886. try
  5887. locO := Create_Object();
  5888. locO.setShort(s_static_prop,val_static);
  5889. locOX := locO as ISDODataObjectEx;
  5890. staticPropCount := locO.getInstanceProperties().getCount();
  5891. locOX.addProperty(s_open_prop,FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]),[pfIsMany]);
  5892. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5893. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[item_data_type]), [pfIsMany]);
  5894. ls := locO.getList(s_open_prop);
  5895. CheckNotEquals(PtrUInt(nil), PtrUInt(ls), 'getList(s_open_prop)');
  5896. for i := 0 to Pred(Length(val_open)) do
  5897. ls.append(val_open[i]);
  5898. CheckEquals(val_static, locO.getShort(s_static_prop), s_static_prop);
  5899. for i := 0 to Pred(Length(val_open)) do
  5900. CheckEquals(val_open[i], ls.getShort(i), s_open_prop);
  5901. finally
  5902. SetLength(val_open,0);
  5903. end;
  5904. end;
  5905. procedure TSDOOpenedDataObject_Test.implicit_add_property_short();
  5906. const
  5907. s_static_prop = s_PROP_SHORT_1;
  5908. s_open_prop = 'open_prop';
  5909. var
  5910. locO : ISDODataObject;
  5911. val_static : TSDOShort;
  5912. val_open : TSDOShort;
  5913. staticPropCount : PtrInt;
  5914. begin
  5915. Randomize();
  5916. val_static := RandomRange(Low(TSDOShort),High(TSDOShort));
  5917. val_open := RandomRange(Low(TSDOShort),High(TSDOShort));
  5918. locO := Create_Object();
  5919. locO.setShort(s_static_prop,val_static);
  5920. staticPropCount := locO.getInstanceProperties().getCount();
  5921. locO.setShort(s_open_prop,val_open);
  5922. CheckEquals( ( staticPropCount + 1), locO.getInstanceProperties().getCount(), 'Property count');
  5923. check_property(locO.getInstanceProperties(), s_open_prop, FFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ShortType]), []);
  5924. CheckEquals(val_static, locO.getShort(s_static_prop), s_static_prop);
  5925. CheckEquals(val_open, locO.getShort(s_open_prop), s_open_prop);
  5926. end;
  5927. {$ENDIF HAS_SDO_SHORT}
  5928. class function TSDOOpenedDataObject_Test.is_open_type() : Boolean;
  5929. begin
  5930. Result := True;
  5931. end;
  5932. initialization
  5933. RegisterTest(TSDODataObject_Test.GetTestSuitePath(),TSDODataObject_Test.Suite);
  5934. RegisterTest(TSDOOpenedDataObject_Test.GetTestSuitePath(),TSDOOpenedDataObject_Test.Suite);
  5935. RegisterTest('object\observer', TObserver_Test.Suite);
  5936. end.