test_dataobjectlist.pas 231 KB

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