test_field_imp.pas 411 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550
  1. {$INCLUDE sdo_global.inc}
  2. unit test_field_imp;
  3. interface
  4. uses SysUtils, Classes
  5. {$IFDEF FPC}
  6. ,fpcunit, testutils, testregistry
  7. {$ENDIF}
  8. {$IFNDEF FPC}
  9. ,TestFrameWork
  10. {$ENDIF}
  11. ,test_suite_utils, sdo_types, sdo, sdo_field_imp ;
  12. type
  13. TSDOField_Test = class(TWstBaseTest)
  14. protected
  15. function Create_Field() : ISDOField;virtual;abstract;
  16. class function GetTestSuitePath() : string;
  17. published
  18. procedure isSet();
  19. procedure unset();virtual;
  20. procedure isNull();
  21. procedure setNull();virtual;
  22. end;
  23. TSDOBooleanField_Test = class(TSDOField_Test)
  24. protected
  25. function Create_Field() : ISDOField;override;
  26. published
  27. procedure getBoolean();
  28. procedure setBoolean();
  29. procedure getString();
  30. procedure setString();
  31. procedure getInteger();
  32. procedure setInteger();
  33. procedure getByte();
  34. procedure setByte();
  35. procedure getLong();
  36. procedure setLong();
  37. procedure getShort();
  38. procedure setShort();
  39. procedure getCharacter();
  40. procedure setCharacter();
  41. procedure getVariant();
  42. procedure setVariant();
  43. end;
  44. TSDOIntegerField_Test = class(TSDOField_Test)
  45. protected
  46. function Create_Field() : ISDOField;override;
  47. published
  48. procedure getBoolean();
  49. procedure setBoolean();
  50. procedure getString();
  51. procedure setString();
  52. procedure getInteger();
  53. procedure setInteger();
  54. procedure getByte();
  55. procedure setByte();
  56. procedure getLong();
  57. procedure setLong();
  58. procedure getShort();
  59. procedure setShort();
  60. procedure getCharacter();
  61. procedure setCharacter();
  62. procedure getVariant();
  63. procedure setVariant();
  64. end;
  65. TSDOStringField_Test = class(TSDOField_Test)
  66. protected
  67. function Create_Field() : ISDOField;override;
  68. class procedure CleanUpBuffer(var ABuffer : PPSDOString);
  69. published
  70. procedure getBoolean();
  71. procedure setBoolean();
  72. procedure getString();
  73. procedure setString();
  74. procedure getInteger();
  75. procedure setInteger();
  76. procedure getByte();
  77. procedure setByte();
  78. procedure getLong();
  79. procedure setLong();
  80. procedure getShort();
  81. procedure setShort();
  82. procedure getCharacter();
  83. procedure setCharacter();
  84. procedure getVariant();
  85. procedure setVariant();
  86. procedure unset();override;
  87. procedure setNull();override;
  88. procedure setString_unset_setStrin();
  89. end;
  90. TSDOBaseDataObject_Test = class(TSDOField_Test)
  91. private
  92. FFactory : ISDODataFactory;
  93. protected
  94. class function Create_Factory() : ISDODataFactory;
  95. procedure SetUp(); override;
  96. procedure TearDown(); override;
  97. protected
  98. function Create_Field() : ISDOField;override;
  99. published
  100. procedure getDataObject();
  101. procedure setDataObject();
  102. procedure unset();override;
  103. procedure setNull();override;
  104. procedure getVariant();
  105. procedure setVariant();
  106. end;
  107. TSDOChangeSummaryField_Test = class(TSDOField_Test)
  108. private
  109. FFactory : ISDODataFactory;
  110. protected
  111. class function Create_Factory() : ISDODataFactory;
  112. procedure SetUp(); override;
  113. procedure TearDown(); override;
  114. protected
  115. function Create_Field() : ISDOField;override;
  116. published
  117. procedure getChangeSummary();
  118. procedure setChangeSummary();
  119. procedure unset();override;
  120. procedure setNull();override;
  121. end;
  122. TSDOByteField_Test = class(TSDOField_Test)
  123. protected
  124. function Create_Field() : ISDOField;override;
  125. published
  126. procedure getBoolean();
  127. procedure setBoolean();
  128. procedure getString();
  129. procedure setString();
  130. procedure getInteger();
  131. procedure setInteger();
  132. procedure getByte();
  133. procedure setByte();
  134. procedure getCharacter();
  135. procedure setCharacter();
  136. procedure getLong();
  137. procedure setLong();
  138. procedure getShort();
  139. procedure setShort();
  140. procedure getVariant();
  141. procedure setVariant();
  142. end;
  143. TSDODateField_Test = class(TSDOField_Test)
  144. protected
  145. function Create_Field() : ISDOField;override;
  146. public
  147. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  148. published
  149. procedure getDate();
  150. procedure setDate();
  151. procedure getString();
  152. procedure setString();
  153. procedure getVariant();
  154. procedure setVariant();
  155. end;
  156. {$IFDEF HAS_SDO_BYTES}
  157. TSDOBytesField_Test = class(TSDOField_Test)
  158. protected
  159. function Create_Field() : ISDOField;override;
  160. class procedure CleanUpBuffer(var ABuffer : PPSDOBytes);
  161. procedure CompareVarToBytes(
  162. const ABytes : TSDOBytes;
  163. const AVar : Variant
  164. );
  165. published
  166. procedure getBytes();
  167. procedure setBytes();
  168. procedure getString();
  169. procedure setString();
  170. procedure getVariant();
  171. procedure setVariant();
  172. end;
  173. {$ENDIF HAS_SDO_BYTES}
  174. {$IFDEF HAS_SDO_CHAR}
  175. TSDOCharField_Test = class(TSDOField_Test)
  176. protected
  177. function Create_Field() : ISDOField;override;
  178. published
  179. procedure getBoolean();
  180. procedure setBoolean();
  181. procedure getString();
  182. procedure setString();
  183. procedure getInteger();
  184. procedure setInteger();
  185. procedure getByte();
  186. procedure setByte();
  187. procedure getCharacter();
  188. procedure setCharacter();
  189. procedure getLong();
  190. procedure setLong();
  191. procedure getShort();
  192. procedure setShort();
  193. procedure getVariant();
  194. procedure setVariant();
  195. end;
  196. {$ENDIF HAS_SDO_CHAR}
  197. {$IFDEF HAS_SDO_CURRENCY}
  198. TSDOCurrencyField_Test = class(TSDOField_Test)
  199. protected
  200. function Create_Field() : ISDOField;override;
  201. published
  202. procedure getCurrency();
  203. procedure setCurrency();
  204. procedure getDouble();
  205. procedure setDouble();
  206. procedure getFloat();
  207. procedure setFloat();
  208. procedure getString();
  209. procedure setString();
  210. procedure getVariant();
  211. procedure setVariant();
  212. end;
  213. {$ENDIF HAS_SDO_CURRENCY}
  214. {$IFDEF HAS_SDO_DOUBLE}
  215. TSDODoubleField_Test = class(TSDOField_Test)
  216. protected
  217. function Create_Field() : ISDOField;override;
  218. published
  219. procedure getCurrency();
  220. procedure setCurrency();
  221. procedure getDouble();
  222. procedure setDouble();
  223. procedure getFloat();
  224. procedure setFloat();
  225. procedure getString();
  226. procedure setString();
  227. procedure getVariant();
  228. procedure setVariant();
  229. end;
  230. {$ENDIF HAS_SDO_DOUBLE}
  231. {$IFDEF HAS_SDO_FLOAT}
  232. TSDOFloatField_Test = class(TSDOField_Test)
  233. protected
  234. function Create_Field() : ISDOField;override;
  235. published
  236. procedure getCurrency();
  237. procedure setCurrency();
  238. procedure getDouble();
  239. procedure setDouble();
  240. procedure getFloat();
  241. procedure setFloat();
  242. procedure getString();
  243. procedure setString();
  244. procedure getVariant();
  245. procedure setVariant();
  246. end;
  247. {$ENDIF HAS_SDO_FLOAT}
  248. {$IFDEF HAS_SDO_LONG}
  249. TSDOLongField_Test = class(TSDOField_Test)
  250. protected
  251. function Create_Field() : ISDOField;override;
  252. published
  253. procedure getBoolean();
  254. procedure setBoolean();
  255. procedure getString();
  256. procedure setString();
  257. procedure getInteger();
  258. procedure setInteger();
  259. procedure getByte();
  260. procedure setByte();
  261. procedure getCharacter();
  262. procedure setCharacter();
  263. procedure getLong();
  264. procedure setLong();
  265. procedure getShort();
  266. procedure setShort();
  267. procedure getVariant();
  268. procedure setVariant();
  269. end;
  270. {$ENDIF HAS_SDO_LONG}
  271. {$IFDEF HAS_SDO_SHORT}
  272. TSDOShortField_Test = class(TSDOField_Test)
  273. protected
  274. function Create_Field() : ISDOField;override;
  275. published
  276. procedure getBoolean();
  277. procedure setBoolean();
  278. procedure getString();
  279. procedure setString();
  280. procedure getInteger();
  281. procedure setInteger();
  282. procedure getByte();
  283. procedure setByte();
  284. procedure getCharacter();
  285. procedure setCharacter();
  286. procedure getLong();
  287. procedure setLong();
  288. procedure getShort();
  289. procedure setShort();
  290. procedure getVariant();
  291. procedure setVariant();
  292. end;
  293. {$ENDIF HAS_SDO_SHORT}
  294. implementation
  295. uses
  296. Variants,
  297. sdo_imp_utils, sdo_datafactory, sdo_changesummary, sdo_date_utils, DateUtils;
  298. const s_URI_1 = 'uri:1'; s_URI_3 = 'uri:3';
  299. s_TYPE_1 = 'type1'; s_TYPE_2 = 'type2'; s_TYPE_3 = 'type3';
  300. s_PROP_BOOL_1 = 'propboolean1'; s_PROP_INTEGER_1 = 'propinteger1';
  301. s_PROP_BOOL_2 = 'propboolean2'; s_PROP_INTEGER_2 = 'propinteger2';
  302. s_PROP_STR_1 = 'propStr1'; s_PROP_STR_2 = 'propStr2';
  303. s_PROP_OBJ_CONT = 'propobj_cont'; s_PROP_OBJ_REF = 'propobj_ref';
  304. s_PROP_BOOL_A = 'propbooleanA'; s_PROP_INTEGER_A = 'propintegerA';
  305. s_PROP_STR_A = 'propStrA';
  306. s_PROP_CHANGE_SUMMARY = 'propChangeSummary';
  307. { TSDOBooleanField_Test }
  308. function TSDOBooleanField_Test.Create_Field() : ISDOField;
  309. begin
  310. Result := TSDOBooleanField.Create();
  311. end;
  312. procedure TSDOBooleanField_Test.getBoolean();
  313. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  314. var
  315. obj : ISDOField;
  316. intVal : DWord;
  317. buffer, valBuffer, attributeBuffer : PByte;
  318. begin
  319. intVal := 0;
  320. buffer := @intVal;
  321. valBuffer := buffer;
  322. attributeBuffer := buffer;
  323. Inc(valBuffer);
  324. obj := Create_Field();
  325. valBuffer^ := 1;
  326. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  327. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  328. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  329. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  330. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  331. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  332. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  333. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  334. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  335. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  336. valBuffer^ := 0;
  337. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  338. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  339. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  340. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  341. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  342. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  343. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  344. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  345. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  346. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  347. intVal := 0;
  348. Inc(valBuffer);
  349. Inc(attributeBuffer);
  350. valBuffer^ := 1;
  351. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  352. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  353. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  354. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  355. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  356. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  357. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  358. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  359. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  360. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  361. valBuffer^ := 0;
  362. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  363. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  364. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  365. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  366. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  367. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  368. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  369. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  370. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  371. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  372. end;
  373. procedure TSDOBooleanField_Test.getByte();
  374. const F_OFFSET = 0;
  375. var
  376. obj : ISDOField;
  377. intVal : DWord;
  378. buffer, valBuffer, attributeBuffer : PByte;
  379. begin
  380. intVal := 0;
  381. buffer := @intVal;
  382. attributeBuffer := buffer;
  383. valBuffer := buffer;
  384. Inc(valBuffer);
  385. obj := Create_Field();
  386. valBuffer^ := 1;
  387. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  388. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  389. CheckEquals(1,obj.getByte(buffer,F_OFFSET));
  390. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  391. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  392. CheckEquals(1,obj.getByte(buffer,F_OFFSET));
  393. valBuffer^ := 0;
  394. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  395. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  396. CheckEquals(0,obj.getByte(buffer,F_OFFSET));
  397. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  398. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  399. CheckEquals(0,obj.getByte(buffer,F_OFFSET));
  400. valBuffer^ := 1;
  401. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  402. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  403. CheckEquals(1,obj.getByte(buffer,F_OFFSET));
  404. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  405. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  406. CheckEquals(1,obj.getByte(buffer,F_OFFSET));
  407. end;
  408. procedure TSDOBooleanField_Test.getCharacter();
  409. const F_OFFSET = 0;
  410. var
  411. obj : ISDOField;
  412. intVal : DWord;
  413. buffer, valBuffer, attributeBuffer : PByte;
  414. begin
  415. intVal := 0;
  416. buffer := @intVal;
  417. attributeBuffer := buffer;
  418. valBuffer := buffer;
  419. Inc(valBuffer);
  420. obj := Create_Field();
  421. valBuffer^ := 1;
  422. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  423. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  424. CheckEquals('1',obj.getCharacter(buffer,F_OFFSET));
  425. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  426. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  427. CheckEquals('1',obj.getCharacter(buffer,F_OFFSET));
  428. valBuffer^ := 0;
  429. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  430. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  431. CheckEquals('0',obj.getCharacter(buffer,F_OFFSET));
  432. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  433. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  434. CheckEquals('0',obj.getCharacter(buffer,F_OFFSET));
  435. valBuffer^ := 1;
  436. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  437. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  438. CheckEquals('1',obj.getCharacter(buffer,F_OFFSET));
  439. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  440. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  441. CheckEquals('1',obj.getCharacter(buffer,F_OFFSET));
  442. end;
  443. procedure TSDOBooleanField_Test.getInteger();
  444. const F_OFFSET = 0;
  445. var
  446. obj : ISDOField;
  447. intVal : DWord;
  448. buffer, valBuffer, attributeBuffer : PByte;
  449. begin
  450. intVal := 0;
  451. buffer := @intVal;
  452. attributeBuffer := buffer;
  453. valBuffer := buffer;
  454. Inc(valBuffer);
  455. obj := Create_Field();
  456. valBuffer^ := 1;
  457. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  458. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  459. CheckEquals(1,obj.getInteger(buffer,F_OFFSET));
  460. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  461. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  462. CheckEquals(1,obj.getInteger(buffer,F_OFFSET));
  463. valBuffer^ := 0;
  464. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  465. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  466. CheckEquals(0,obj.getInteger(buffer,F_OFFSET));
  467. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  468. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  469. CheckEquals(0,obj.getInteger(buffer,F_OFFSET));
  470. valBuffer^ := 1;
  471. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  472. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  473. CheckEquals(1,obj.getInteger(buffer,F_OFFSET));
  474. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  475. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  476. CheckEquals(1,obj.getInteger(buffer,F_OFFSET));
  477. end;
  478. procedure TSDOBooleanField_Test.getLong();
  479. const F_OFFSET = 0;
  480. var
  481. obj : ISDOField;
  482. intVal : DWord;
  483. buffer, valBuffer, attributeBuffer : PByte;
  484. begin
  485. intVal := 0;
  486. buffer := @intVal;
  487. attributeBuffer := buffer;
  488. valBuffer := buffer;
  489. Inc(valBuffer);
  490. obj := Create_Field();
  491. valBuffer^ := 1;
  492. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  493. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  494. CheckEquals(1,obj.getLong(buffer,F_OFFSET));
  495. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  496. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  497. CheckEquals(1,obj.getLong(buffer,F_OFFSET));
  498. valBuffer^ := 0;
  499. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  500. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  501. CheckEquals(0,obj.getLong(buffer,F_OFFSET));
  502. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  503. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  504. CheckEquals(0,obj.getLong(buffer,F_OFFSET));
  505. valBuffer^ := 1;
  506. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  507. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  508. CheckEquals(1,obj.getLong(buffer,F_OFFSET));
  509. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  510. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  511. CheckEquals(1,obj.getLong(buffer,F_OFFSET));
  512. end;
  513. procedure TSDOBooleanField_Test.getShort();
  514. const F_OFFSET = 0;
  515. var
  516. obj : ISDOField;
  517. intVal : DWord;
  518. buffer, valBuffer, attributeBuffer : PByte;
  519. begin
  520. intVal := 0;
  521. buffer := @intVal;
  522. attributeBuffer := buffer;
  523. valBuffer := buffer;
  524. Inc(valBuffer);
  525. obj := Create_Field();
  526. valBuffer^ := 1;
  527. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  528. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  529. CheckEquals(1,obj.getShort(buffer,F_OFFSET));
  530. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  531. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  532. CheckEquals(1,obj.getShort(buffer,F_OFFSET));
  533. valBuffer^ := 0;
  534. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  535. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  536. CheckEquals(0,obj.getShort(buffer,F_OFFSET));
  537. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  538. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  539. CheckEquals(0,obj.getShort(buffer,F_OFFSET));
  540. valBuffer^ := 1;
  541. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  542. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  543. CheckEquals(1,obj.getShort(buffer,F_OFFSET));
  544. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  545. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  546. CheckEquals(1,obj.getShort(buffer,F_OFFSET));
  547. end;
  548. procedure TSDOBooleanField_Test.getString();
  549. const F_OFFSET = 0;
  550. var
  551. obj : ISDOField;
  552. intVal : DWord;
  553. buffer, valBuffer, attributeBuffer : PByte;
  554. begin
  555. intVal := 0;
  556. buffer := @intVal;
  557. attributeBuffer := buffer;
  558. valBuffer := buffer;
  559. Inc(valBuffer);
  560. obj := Create_Field();
  561. valBuffer^ := 1;
  562. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  563. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  564. CheckEquals('1',obj.getString(buffer,F_OFFSET));
  565. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  566. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  567. CheckEquals('1',obj.getString(buffer,F_OFFSET));
  568. valBuffer^ := 0;
  569. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  570. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  571. CheckEquals('0',obj.getString(buffer,F_OFFSET));
  572. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  573. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  574. CheckEquals('0',obj.getString(buffer,F_OFFSET));
  575. valBuffer^ := 1;
  576. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  577. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  578. CheckEquals('1',obj.getString(buffer,F_OFFSET));
  579. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  580. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  581. CheckEquals('1',obj.getString(buffer,F_OFFSET));
  582. end;
  583. procedure TSDOBooleanField_Test.getVariant();
  584. const F_OFFSET = 0;
  585. var
  586. obj : ISDOField;
  587. intVal : DWord;
  588. buffer : PByte;
  589. v : Variant;
  590. begin
  591. intVal := 0;
  592. buffer := @intVal;
  593. obj := Create_Field();
  594. obj.setBoolean(buffer,F_OFFSET,False);
  595. v := obj.getVariant(buffer,F_OFFSET);
  596. CheckEquals(False,Boolean(v));
  597. obj.setBoolean(buffer,F_OFFSET,True);
  598. v := obj.getVariant(buffer,F_OFFSET);
  599. CheckEquals(True,Boolean(v));
  600. end;
  601. procedure TSDOBooleanField_Test.setBoolean();
  602. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  603. var
  604. obj : ISDOField;
  605. intVal : DWord;
  606. buffer, valBuffer, attributeBuffer: PByte;
  607. begin
  608. intVal := 0;
  609. buffer := @intVal;
  610. valBuffer := buffer;
  611. attributeBuffer := buffer;
  612. Inc(valBuffer);
  613. obj := Create_Field();
  614. obj.setBoolean(buffer,F_OFFSET_0,True);
  615. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  616. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  617. CheckEquals(1,valBuffer^);
  618. obj.setBoolean(buffer,F_OFFSET_0,False);
  619. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  620. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  621. CheckEquals(0,valBuffer^);
  622. intVal := 0;
  623. Inc(valBuffer);
  624. Inc(attributeBuffer);
  625. obj.setBoolean(buffer,F_OFFSET_1,True);
  626. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  627. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  628. CheckEquals(1,valBuffer^);
  629. obj.setBoolean(buffer,F_OFFSET_1,False);
  630. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  631. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  632. CheckEquals(0,valBuffer^);
  633. end;
  634. procedure TSDOBooleanField_Test.setByte();
  635. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  636. var
  637. obj : ISDOField;
  638. intVal : DWord;
  639. buffer, valBuffer, attributeBuffer : PByte;
  640. begin
  641. intVal := 0;
  642. buffer := @intVal;
  643. valBuffer := buffer;
  644. attributeBuffer := buffer;
  645. Inc(valBuffer);
  646. obj := Create_Field();
  647. obj.setByte(buffer,F_OFFSET_0,1);
  648. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  649. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  650. CheckEquals(1,valBuffer^);
  651. obj.setByte(buffer,F_OFFSET_0,0);
  652. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  653. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  654. CheckEquals(0,valBuffer^);
  655. intVal := 0;
  656. Inc(valBuffer);
  657. Inc(attributeBuffer);
  658. obj.setByte(buffer,F_OFFSET_1,123);
  659. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  660. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  661. CheckEquals(1,valBuffer^);
  662. obj.setByte(buffer,F_OFFSET_1,0);
  663. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  664. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  665. CheckEquals(0,valBuffer^);
  666. end;
  667. procedure TSDOBooleanField_Test.setCharacter();
  668. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  669. var
  670. obj : ISDOField;
  671. intVal : DWord;
  672. buffer, valBuffer, attributeBuffer : PByte;
  673. begin
  674. intVal := 0;
  675. buffer := @intVal;
  676. attributeBuffer := buffer;
  677. valBuffer := buffer;
  678. Inc(valBuffer);
  679. obj := Create_Field();
  680. obj.setCharacter(buffer,F_OFFSET_0,'T');
  681. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  682. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  683. CheckEquals(1,valBuffer^);
  684. obj.setCharacter(buffer,F_OFFSET_0,#0);
  685. CheckEquals(0,valBuffer^);
  686. intVal := 0;
  687. Inc(valBuffer);
  688. Inc(attributeBuffer);
  689. obj.setCharacter(buffer,F_OFFSET_1,'T');
  690. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  691. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  692. CheckEquals(1,valBuffer^);
  693. obj.setCharacter(buffer,F_OFFSET_1,#0);
  694. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  695. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  696. CheckEquals(0,valBuffer^);
  697. end;
  698. procedure TSDOBooleanField_Test.setInteger();
  699. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  700. var
  701. obj : ISDOField;
  702. intVal : DWord;
  703. buffer, valBuffer, attributeBuffer : PByte;
  704. begin
  705. intVal := 0;
  706. buffer := @intVal;
  707. valBuffer := buffer;
  708. attributeBuffer := buffer;
  709. Inc(valBuffer);
  710. obj := Create_Field();
  711. obj.setInteger(buffer,F_OFFSET_0,1);
  712. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  713. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  714. CheckEquals(1,valBuffer^);
  715. obj.setInteger(buffer,F_OFFSET_0,0);
  716. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  717. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  718. CheckEquals(0,valBuffer^);
  719. intVal := 0;
  720. Inc(valBuffer);
  721. Inc(attributeBuffer);
  722. obj.setInteger(buffer,F_OFFSET_1,300);
  723. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  724. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  725. CheckEquals(1,valBuffer^);
  726. obj.setInteger(buffer,F_OFFSET_1,0);
  727. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  728. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  729. CheckEquals(0,valBuffer^);
  730. end;
  731. procedure TSDOBooleanField_Test.setLong();
  732. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  733. var
  734. obj : ISDOField;
  735. intVal : DWord;
  736. buffer, valBuffer, attributeBuffer : PByte;
  737. begin
  738. intVal := 0;
  739. buffer := @intVal;
  740. valBuffer := buffer;
  741. attributeBuffer := buffer;
  742. Inc(valBuffer);
  743. obj := Create_Field();
  744. obj.setLong(buffer,F_OFFSET_0,1);
  745. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  746. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  747. CheckEquals(1,valBuffer^);
  748. obj.setLong(buffer,F_OFFSET_0,0);
  749. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  750. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  751. CheckEquals(0,valBuffer^);
  752. intVal := 0;
  753. Inc(valBuffer);
  754. Inc(attributeBuffer);
  755. obj.setLong(buffer,F_OFFSET_1,123);
  756. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  757. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  758. CheckEquals(1,valBuffer^);
  759. obj.setLong(buffer,F_OFFSET_1,0);
  760. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  761. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  762. CheckEquals(0,valBuffer^);
  763. end;
  764. procedure TSDOBooleanField_Test.setShort();
  765. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  766. var
  767. obj : ISDOField;
  768. intVal : DWord;
  769. buffer, valBuffer, attributeBuffer : PByte;
  770. begin
  771. intVal := 0;
  772. buffer := @intVal;
  773. valBuffer := buffer;
  774. attributeBuffer := buffer;
  775. Inc(valBuffer);
  776. obj := Create_Field();
  777. obj.setShort(buffer,F_OFFSET_0,1);
  778. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  779. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  780. CheckEquals(1,valBuffer^);
  781. obj.setShort(buffer,F_OFFSET_0,0);
  782. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  783. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  784. CheckEquals(0,valBuffer^);
  785. intVal := 0;
  786. Inc(valBuffer);
  787. Inc(attributeBuffer);
  788. obj.setShort(buffer,F_OFFSET_1,123);
  789. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  790. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  791. CheckEquals(1,valBuffer^);
  792. obj.setShort(buffer,F_OFFSET_1,0);
  793. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  794. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  795. CheckEquals(0,valBuffer^);
  796. end;
  797. procedure TSDOBooleanField_Test.setString();
  798. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  799. var
  800. obj : ISDOField;
  801. intVal : DWord;
  802. buffer, valBuffer, attributeBuffer : PByte;
  803. begin
  804. intVal := 0;
  805. buffer := @intVal;
  806. attributeBuffer := buffer;
  807. valBuffer := buffer;
  808. Inc(valBuffer);
  809. obj := Create_Field();
  810. obj.setString(buffer,F_OFFSET_0,'True');
  811. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  812. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  813. CheckEquals(1,valBuffer^);
  814. obj.setString(buffer,F_OFFSET_0,'False');
  815. CheckEquals(0,valBuffer^);
  816. intVal := 0;
  817. Inc(valBuffer);
  818. Inc(attributeBuffer);
  819. obj.setString(buffer,F_OFFSET_1,'True');
  820. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  821. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  822. CheckEquals(1,valBuffer^);
  823. obj.setString(buffer,F_OFFSET_1,'False');
  824. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  825. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  826. CheckEquals(0,valBuffer^);
  827. end;
  828. procedure TSDOBooleanField_Test.setVariant();
  829. const F_OFFSET = 0;
  830. var
  831. obj : ISDOField;
  832. intVal : DWord;
  833. buffer : PByte;
  834. begin
  835. intVal := 0;
  836. buffer := @intVal;
  837. obj := Create_Field();
  838. obj.setVariant(buffer,F_OFFSET,False);
  839. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET));
  840. obj.setVariant(buffer,F_OFFSET,True);
  841. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET));
  842. end;
  843. { TSDOField_Test }
  844. class function TSDOField_Test.GetTestSuitePath: string;
  845. begin
  846. Result := 'Field';
  847. end;
  848. procedure TSDOField_Test.isNull();
  849. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  850. var
  851. obj : ISDOField;
  852. intVal : DWord;
  853. buffer, valBuffer : PByte;
  854. begin
  855. intVal := 0;
  856. buffer := @intVal;
  857. valBuffer := buffer;
  858. obj := Create_Field();
  859. valBuffer^ := 0;
  860. SetBit(valBuffer^,BIT_ORDER_SET,True);
  861. SetBit(valBuffer^,BIT_ORDER_NULL,True);
  862. CheckEquals(True,obj.isSet(buffer,F_OFFSET_0));
  863. CheckEquals(True,obj.isNull(buffer,F_OFFSET_0));
  864. valBuffer^ := 0;
  865. CheckEquals(False,obj.isSet(buffer,F_OFFSET_0));
  866. CheckEquals(False,obj.isNull(buffer,F_OFFSET_0));
  867. valBuffer^ := 0;
  868. SetBit(valBuffer^,BIT_ORDER_SET,False);
  869. SetBit(valBuffer^,BIT_ORDER_NULL,True);
  870. CheckEquals(False,obj.isSet(buffer,F_OFFSET_0));
  871. CheckEquals(True,obj.isNull(buffer,F_OFFSET_0));
  872. intVal := 0;
  873. Inc(valBuffer);
  874. valBuffer^ := 0;
  875. SetBit(valBuffer^,BIT_ORDER_SET,True);
  876. SetBit(valBuffer^,BIT_ORDER_NULL,True);
  877. CheckEquals(True,obj.isSet(buffer,F_OFFSET_1));
  878. CheckEquals(True,obj.isNull(buffer,F_OFFSET_1));
  879. valBuffer^ := 0;
  880. CheckEquals(False,obj.isSet(buffer,F_OFFSET_1));
  881. CheckEquals(False,obj.isNull(buffer,F_OFFSET_1));
  882. valBuffer^ := 0;
  883. SetBit(valBuffer^,BIT_ORDER_SET,False);
  884. SetBit(valBuffer^,BIT_ORDER_NULL,True);
  885. CheckEquals(False,obj.isSet(buffer,F_OFFSET_1));
  886. CheckEquals(True,obj.isNull(buffer,F_OFFSET_1));
  887. end;
  888. procedure TSDOField_Test.isSet();
  889. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  890. var
  891. obj : ISDOField;
  892. intVal : DWord;
  893. buffer, valBuffer : PByte;
  894. begin
  895. intVal := 0;
  896. buffer := @intVal;
  897. valBuffer := buffer;
  898. obj := Create_Field();
  899. SetBit(valBuffer^,BIT_ORDER_SET,True);// valBuffer^ := 2;
  900. CheckEquals(True,obj.isSet(buffer,F_OFFSET_0));
  901. valBuffer^ := 0;
  902. CheckEquals(False,obj.isSet(buffer,F_OFFSET_0));
  903. intVal := 0;
  904. Inc(valBuffer);
  905. SetBit(valBuffer^,BIT_ORDER_SET,True);
  906. SetBit(valBuffer^,BIT_ORDER_SET + 1,True); //valBuffer^ := 6;
  907. CheckEquals(True,obj.isSet(buffer,F_OFFSET_1));
  908. valBuffer^ := 0;
  909. CheckEquals(False,obj.isSet(buffer,F_OFFSET_1));
  910. end;
  911. procedure TSDOField_Test.setNull();
  912. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  913. var
  914. obj : ISDOField;
  915. intVal : DWord;
  916. buffer, valBuffer : PByte;
  917. begin
  918. intVal := 0;
  919. buffer := @intVal;
  920. valBuffer := buffer;
  921. obj := Create_Field();
  922. obj.setNull(buffer,F_OFFSET_0);
  923. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET));
  924. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_NULL));
  925. SetBit(valBuffer^,BIT_ORDER_SET,True);
  926. SetBit(valBuffer^,BIT_ORDER_SET,False);
  927. obj.setNull(buffer,F_OFFSET_0);
  928. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET));
  929. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_NULL));
  930. intVal := 0;
  931. Inc(valBuffer);
  932. obj.setNull(buffer,F_OFFSET_1);
  933. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET));
  934. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_NULL));
  935. SetBit(valBuffer^,BIT_ORDER_SET,True);
  936. SetBit(valBuffer^,BIT_ORDER_SET,False);
  937. obj.setNull(buffer,F_OFFSET_1);
  938. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET));
  939. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_NULL));
  940. end;
  941. procedure TSDOField_Test.unset();
  942. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  943. var
  944. obj : ISDOField;
  945. intVal : DWord;
  946. buffer, valBuffer : PByte;
  947. begin
  948. intVal := 0;
  949. buffer := @intVal;
  950. valBuffer := buffer;
  951. obj := Create_Field();
  952. obj.unset(buffer,F_OFFSET_0);
  953. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  954. SetBit(valBuffer^,BIT_ORDER_SET,True);//valBuffer^ := 2;
  955. obj.unset(buffer,F_OFFSET_0);
  956. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  957. SetBit(valBuffer^,BIT_ORDER_SET,True);//valBuffer^ := 6;
  958. SetBit(valBuffer^,BIT_ORDER_SET + 1,True);
  959. obj.unset(buffer,F_OFFSET_0);
  960. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  961. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET + 1));
  962. intVal := 0;
  963. Inc(valBuffer);
  964. obj.unset(buffer,F_OFFSET_1);
  965. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  966. SetBit(valBuffer^,BIT_ORDER_SET,True);//valBuffer^ := 2;
  967. obj.unset(buffer,F_OFFSET_1);
  968. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  969. SetBit(valBuffer^,BIT_ORDER_SET,True);//valBuffer^ := 6;
  970. SetBit(valBuffer^,BIT_ORDER_SET + 1,True);//
  971. obj.unset(buffer,F_OFFSET_1);
  972. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  973. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET + 1));
  974. end;
  975. { TSDOIntegerField_Test }
  976. function TSDOIntegerField_Test.Create_Field() : ISDOField;
  977. begin
  978. Result := TSDOIntegerField.Create();
  979. end;
  980. procedure TSDOIntegerField_Test.getBoolean();
  981. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  982. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  983. var
  984. obj : ISDOField;
  985. intVal : QWord;
  986. buffer, tmpBuffer, attributeBuffer : PByte;
  987. valBuffer : PSDOInteger;
  988. begin
  989. intVal := 0;
  990. buffer := @intVal;
  991. tmpBuffer := buffer;
  992. attributeBuffer := buffer;
  993. Inc(tmpBuffer);
  994. valBuffer := PSDOInteger(tmpBuffer);
  995. obj := Create_Field();
  996. valBuffer^ := VAL_1;
  997. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  998. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  999. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  1000. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1001. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1002. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  1003. valBuffer^ := VAL_2;
  1004. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1005. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1006. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  1007. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1008. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1009. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  1010. valBuffer^ := VAL_3;
  1011. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1012. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1013. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  1014. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1015. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1016. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  1017. intVal := 0;
  1018. Inc(tmpBuffer);
  1019. Inc(attributeBuffer);
  1020. valBuffer := PSDOInteger(tmpBuffer);
  1021. valBuffer^ := VAL_1;
  1022. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1023. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1024. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  1025. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1026. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1027. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  1028. valBuffer^ := VAL_2;
  1029. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1030. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1031. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  1032. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1033. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1034. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  1035. valBuffer^ := VAL_3;
  1036. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1037. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1038. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  1039. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1040. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1041. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  1042. end;
  1043. procedure TSDOIntegerField_Test.getByte();
  1044. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1045. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  1046. var
  1047. obj : ISDOField;
  1048. intVal : QWord;
  1049. buffer, tmpBuffer, attributeBuffer : PByte;
  1050. valBuffer : PSDOInteger;
  1051. begin
  1052. intVal := 0;
  1053. buffer := @intVal;
  1054. tmpBuffer := buffer;
  1055. attributeBuffer := buffer;
  1056. Inc(tmpBuffer);
  1057. valBuffer := PSDOInteger(tmpBuffer);
  1058. obj := Create_Field();
  1059. valBuffer^ := VAL_1;
  1060. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1061. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1062. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1063. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1064. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  1065. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1066. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1067. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1068. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1069. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  1070. valBuffer^ := VAL_2;
  1071. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1072. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1073. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1074. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1075. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  1076. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1077. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1078. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1079. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1080. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  1081. valBuffer^ := VAL_3;
  1082. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1083. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1084. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1085. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1086. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  1087. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1088. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1089. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1090. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1091. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  1092. intVal := 0;
  1093. Inc(tmpBuffer);
  1094. Inc(attributeBuffer);
  1095. valBuffer := PSDOInteger(tmpBuffer);
  1096. valBuffer^ := VAL_1;
  1097. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1098. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1099. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1100. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1101. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  1102. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1103. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1104. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1105. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1106. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  1107. valBuffer^ := VAL_2;
  1108. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1109. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1110. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1111. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1112. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  1113. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1114. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1115. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1116. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1117. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  1118. valBuffer^ := VAL_3;
  1119. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1120. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1121. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1122. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1123. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  1124. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1125. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1126. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1127. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1128. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  1129. end;
  1130. procedure TSDOIntegerField_Test.getCharacter();
  1131. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1132. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  1133. var
  1134. obj : ISDOField;
  1135. intVal : QWord;
  1136. buffer, tmpBuffer, attributeBuffer : PByte;
  1137. valBuffer : PSDOInteger;
  1138. begin
  1139. intVal := 0;
  1140. buffer := @intVal;
  1141. tmpBuffer := buffer;
  1142. attributeBuffer := buffer;
  1143. Inc(tmpBuffer);
  1144. valBuffer := PSDOInteger(tmpBuffer);
  1145. obj := Create_Field();
  1146. valBuffer^ := VAL_1;
  1147. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1148. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1149. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  1150. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1151. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1152. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  1153. valBuffer^ := VAL_2;
  1154. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1155. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1156. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  1157. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1158. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1159. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  1160. valBuffer^ := VAL_3;
  1161. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1162. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1163. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  1164. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1165. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1166. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  1167. intVal := 0;
  1168. Inc(tmpBuffer);
  1169. Inc(attributeBuffer);
  1170. valBuffer := PSDOInteger(tmpBuffer);
  1171. valBuffer^ := VAL_1;
  1172. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1173. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1174. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  1175. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1176. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1177. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  1178. valBuffer^ := VAL_2;
  1179. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1180. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1181. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  1182. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1183. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1184. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  1185. valBuffer^ := VAL_3;
  1186. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1187. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1188. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  1189. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1190. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1191. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  1192. end;
  1193. procedure TSDOIntegerField_Test.getInteger();
  1194. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1195. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1196. var
  1197. obj : ISDOField;
  1198. intVal : QWord;
  1199. buffer, tmpBuffer, attributeBuffer : PByte;
  1200. valBuffer : PSDOInteger;
  1201. begin
  1202. intVal := 0;
  1203. buffer := @intVal;
  1204. tmpBuffer := buffer;
  1205. attributeBuffer := buffer;
  1206. Inc(tmpBuffer);
  1207. valBuffer := PSDOInteger(tmpBuffer);
  1208. obj := Create_Field();
  1209. valBuffer^ := VAL_1;
  1210. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1211. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1212. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1213. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1214. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  1215. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1216. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1217. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1218. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1219. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  1220. valBuffer^ := VAL_2;
  1221. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1222. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1223. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1224. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1225. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  1226. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1227. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1228. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1229. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1230. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  1231. valBuffer^ := VAL_3;
  1232. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1233. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1234. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1235. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1236. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  1237. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1238. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1239. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1240. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1241. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  1242. intVal := 0;
  1243. Inc(tmpBuffer);
  1244. Inc(attributeBuffer);
  1245. valBuffer := PSDOInteger(tmpBuffer);
  1246. valBuffer^ := VAL_1;
  1247. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1248. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1249. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1250. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1251. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  1252. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1253. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1254. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1255. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1256. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  1257. valBuffer^ := VAL_2;
  1258. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1259. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1260. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1261. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1262. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  1263. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1264. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1265. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1266. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1267. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  1268. valBuffer^ := VAL_3;
  1269. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1270. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1271. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1272. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1273. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  1274. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1275. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1276. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1277. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1278. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  1279. end;
  1280. procedure TSDOIntegerField_Test.getLong();
  1281. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1282. VAL_1 = 12345; VAL_2 = -98765; VAL_3 = 0;
  1283. var
  1284. obj : ISDOField;
  1285. intVal : QWord;
  1286. buffer, tmpBuffer, attributeBuffer : PByte;
  1287. valBuffer : PSDOInteger;
  1288. begin
  1289. intVal := 0;
  1290. buffer := @intVal;
  1291. tmpBuffer := buffer;
  1292. attributeBuffer := buffer;
  1293. Inc(tmpBuffer);
  1294. valBuffer := PSDOInteger(tmpBuffer);
  1295. obj := Create_Field();
  1296. valBuffer^ := VAL_1;
  1297. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1298. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1299. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1300. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1301. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  1302. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1303. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1304. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1305. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1306. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  1307. valBuffer^ := VAL_2;
  1308. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1309. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1310. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1311. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1312. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  1313. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1314. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1315. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1316. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1317. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  1318. valBuffer^ := VAL_3;
  1319. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1320. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1321. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1322. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1323. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  1324. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1325. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1326. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1327. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1328. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  1329. intVal := 0;
  1330. Inc(tmpBuffer);
  1331. Inc(attributeBuffer);
  1332. valBuffer := PSDOInteger(tmpBuffer);
  1333. valBuffer^ := VAL_1;
  1334. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1335. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1336. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1337. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1338. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  1339. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1340. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1341. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1342. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1343. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  1344. valBuffer^ := VAL_2;
  1345. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1346. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1347. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1348. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1349. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  1350. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1351. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1352. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1353. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1354. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  1355. valBuffer^ := VAL_3;
  1356. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1357. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1358. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1359. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1360. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  1361. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1362. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1363. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1364. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1365. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  1366. end;
  1367. procedure TSDOIntegerField_Test.getShort();
  1368. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1369. VAL_1 = 1234; VAL_2 = -987; VAL_3 = 0;
  1370. var
  1371. obj : ISDOField;
  1372. intVal : QWord;
  1373. buffer, tmpBuffer, attributeBuffer : PByte;
  1374. valBuffer : PSDOInteger;
  1375. begin
  1376. intVal := 0;
  1377. buffer := @intVal;
  1378. tmpBuffer := buffer;
  1379. attributeBuffer := buffer;
  1380. Inc(tmpBuffer);
  1381. valBuffer := PSDOInteger(tmpBuffer);
  1382. obj := Create_Field();
  1383. valBuffer^ := VAL_1;
  1384. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1385. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1386. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1387. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1388. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  1389. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1390. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1391. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1392. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1393. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  1394. valBuffer^ := VAL_2;
  1395. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1396. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1397. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1398. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1399. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  1400. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1401. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1402. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1403. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1404. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  1405. valBuffer^ := VAL_3;
  1406. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1407. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1408. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1409. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1410. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  1411. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1412. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1413. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1414. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1415. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  1416. intVal := 0;
  1417. Inc(tmpBuffer);
  1418. Inc(attributeBuffer);
  1419. valBuffer := PSDOInteger(tmpBuffer);
  1420. valBuffer^ := VAL_1;
  1421. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1422. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1423. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1424. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1425. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  1426. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1427. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1428. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1429. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1430. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  1431. valBuffer^ := VAL_2;
  1432. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1433. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1434. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1435. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1436. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  1437. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1438. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1439. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1440. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1441. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  1442. valBuffer^ := VAL_3;
  1443. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1444. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1445. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1446. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1447. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  1448. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1449. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1450. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1451. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1452. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  1453. end;
  1454. procedure TSDOIntegerField_Test.getString();
  1455. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1456. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1457. var
  1458. obj : ISDOField;
  1459. intVal : QWord;
  1460. buffer, tmpBuffer, attributeBuffer : PByte;
  1461. valBuffer : PSDOInteger;
  1462. begin
  1463. intVal := 0;
  1464. buffer := @intVal;
  1465. tmpBuffer := buffer;
  1466. attributeBuffer := buffer;
  1467. Inc(tmpBuffer);
  1468. valBuffer := PSDOInteger(tmpBuffer);
  1469. obj := Create_Field();
  1470. valBuffer^ := VAL_1;
  1471. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1472. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1473. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  1474. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1475. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1476. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  1477. valBuffer^ := VAL_2;
  1478. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1479. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1480. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  1481. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1482. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1483. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  1484. valBuffer^ := VAL_3;
  1485. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1486. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1487. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  1488. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1489. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1490. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  1491. intVal := 0;
  1492. Inc(tmpBuffer);
  1493. Inc(attributeBuffer);
  1494. valBuffer := PSDOInteger(tmpBuffer);
  1495. valBuffer^ := VAL_1;
  1496. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1497. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1498. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  1499. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1500. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1501. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  1502. valBuffer^ := VAL_2;
  1503. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1504. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1505. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  1506. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1507. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1508. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  1509. valBuffer^ := VAL_3;
  1510. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1511. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1512. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  1513. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1514. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1515. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  1516. end;
  1517. procedure TSDOIntegerField_Test.getVariant();
  1518. const
  1519. F_OFFSET = 0;
  1520. SAMPLE_VALUES : array[0..5] of TSDOInteger = (-12345,-678,0,1,12,456789);
  1521. var
  1522. obj : ISDOField;
  1523. intVal : QWord;
  1524. buffer : PByte;
  1525. v : Variant;
  1526. i : Integer;
  1527. begin
  1528. intVal := 0;
  1529. buffer := @intVal;
  1530. obj := Create_Field();
  1531. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  1532. obj.setInteger(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  1533. v := obj.getVariant(buffer,F_OFFSET);
  1534. CheckEquals(SAMPLE_VALUES[i],TSDOInteger(v));
  1535. end;
  1536. end;
  1537. procedure TSDOIntegerField_Test.setBoolean();
  1538. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1539. var
  1540. obj : ISDOField;
  1541. intVal : QWord;
  1542. buffer, tmpBuffer, attributeBuffer : PByte;
  1543. valBuffer : PSDOInteger;
  1544. begin
  1545. intVal := 0;
  1546. buffer := @intVal;
  1547. tmpBuffer := buffer;
  1548. attributeBuffer := buffer;
  1549. Inc(tmpBuffer);
  1550. valBuffer := PSDOInteger(tmpBuffer);
  1551. obj := Create_Field();
  1552. obj.setBoolean(buffer,F_OFFSET_0,True);
  1553. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1554. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1555. CheckEquals(1,valBuffer^);
  1556. obj.setBoolean(buffer,F_OFFSET_0,False);
  1557. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1558. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1559. CheckEquals(0,valBuffer^);
  1560. intVal := 0;
  1561. Inc(tmpBuffer);
  1562. Inc(attributeBuffer);
  1563. valBuffer := PSDOInteger(tmpBuffer);
  1564. obj.setBoolean(buffer,F_OFFSET_1,True);
  1565. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1566. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1567. CheckEquals(1,valBuffer^);
  1568. obj.setBoolean(buffer,F_OFFSET_1,False);
  1569. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1570. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1571. CheckEquals(0,valBuffer^);
  1572. end;
  1573. procedure TSDOIntegerField_Test.setByte();
  1574. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1575. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  1576. var
  1577. obj : ISDOField;
  1578. intVal : QWord;
  1579. buffer, tmpBuffer, attributeBuffer : PByte;
  1580. valBuffer : PSDOInteger;
  1581. begin
  1582. intVal := 0;
  1583. buffer := @intVal;
  1584. tmpBuffer := buffer;
  1585. attributeBuffer := buffer;
  1586. Inc(tmpBuffer);
  1587. valBuffer := PSDOInteger(tmpBuffer);
  1588. obj := Create_Field();
  1589. obj.setByte(buffer,F_OFFSET_0,VAL_1);
  1590. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1591. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1592. CheckEquals(VAL_1,valBuffer^);
  1593. obj.setByte(buffer,F_OFFSET_0,VAL_2);
  1594. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1595. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1596. CheckEquals(VAL_2,valBuffer^);
  1597. obj.setByte(buffer,F_OFFSET_0,VAL_3);
  1598. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1599. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1600. CheckEquals(VAL_3,valBuffer^);
  1601. intVal := 0;
  1602. Inc(tmpBuffer);
  1603. Inc(attributeBuffer);
  1604. valBuffer := PSDOInteger(tmpBuffer);
  1605. obj.setByte(buffer,F_OFFSET_1,VAL_1);
  1606. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1607. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1608. CheckEquals(VAL_1,valBuffer^);
  1609. obj.setByte(buffer,F_OFFSET_1,VAL_2);
  1610. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1611. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1612. CheckEquals(VAL_2,valBuffer^);
  1613. obj.setByte(buffer,F_OFFSET_1,VAL_3);
  1614. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1615. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1616. CheckEquals(VAL_3,valBuffer^);
  1617. end;
  1618. procedure TSDOIntegerField_Test.setCharacter();
  1619. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1620. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  1621. var
  1622. obj : ISDOField;
  1623. intVal : QWord;
  1624. buffer, tmpBuffer, attributeBuffer : PByte;
  1625. valBuffer : PSDOInteger;
  1626. begin
  1627. intVal := 0;
  1628. buffer := @intVal;
  1629. tmpBuffer := buffer;
  1630. attributeBuffer := buffer;
  1631. Inc(tmpBuffer);
  1632. valBuffer := PSDOInteger(tmpBuffer);
  1633. obj := Create_Field();
  1634. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_1));
  1635. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1636. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1637. CheckEquals(VAL_1,valBuffer^);
  1638. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_2));
  1639. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1640. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1641. CheckEquals(VAL_2,valBuffer^);
  1642. intVal := 0;
  1643. Inc(tmpBuffer);
  1644. Inc(attributeBuffer);
  1645. valBuffer := PSDOInteger(tmpBuffer);
  1646. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_1));
  1647. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1648. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1649. CheckEquals(VAL_1,valBuffer^);
  1650. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_2));
  1651. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1652. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1653. CheckEquals(VAL_2,valBuffer^);
  1654. end;
  1655. procedure TSDOIntegerField_Test.setInteger();
  1656. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1657. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1658. var
  1659. obj : ISDOField;
  1660. intVal : QWord;
  1661. buffer, tmpBuffer, attributeBuffer : PByte;
  1662. valBuffer : PSDOInteger;
  1663. begin
  1664. intVal := 0;
  1665. buffer := @intVal;
  1666. tmpBuffer := buffer;
  1667. attributeBuffer := buffer;
  1668. Inc(tmpBuffer);
  1669. valBuffer := PSDOInteger(tmpBuffer);
  1670. obj := Create_Field();
  1671. obj.setInteger(buffer,F_OFFSET_0,VAL_1);
  1672. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1673. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1674. CheckEquals(VAL_1,valBuffer^);
  1675. obj.setInteger(buffer,F_OFFSET_0,VAL_2);
  1676. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1677. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1678. CheckEquals(VAL_2,valBuffer^);
  1679. obj.setInteger(buffer,F_OFFSET_0,VAL_3);
  1680. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1681. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1682. CheckEquals(VAL_3,valBuffer^);
  1683. intVal := 0;
  1684. Inc(tmpBuffer);
  1685. Inc(attributeBuffer);
  1686. valBuffer := PSDOInteger(tmpBuffer);
  1687. obj.setInteger(buffer,F_OFFSET_1,VAL_1);
  1688. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1689. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1690. CheckEquals(VAL_1,valBuffer^);
  1691. obj.setInteger(buffer,F_OFFSET_1,VAL_2);
  1692. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1693. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1694. CheckEquals(VAL_2,valBuffer^);
  1695. obj.setInteger(buffer,F_OFFSET_1,VAL_3);
  1696. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1697. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1698. CheckEquals(VAL_3,valBuffer^);
  1699. end;
  1700. procedure TSDOIntegerField_Test.setLong();
  1701. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1702. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1703. var
  1704. obj : ISDOField;
  1705. intVal : QWord;
  1706. buffer, tmpBuffer, attributeBuffer : PByte;
  1707. valBuffer : PSDOInteger;
  1708. begin
  1709. intVal := 0;
  1710. buffer := @intVal;
  1711. tmpBuffer := buffer;
  1712. attributeBuffer := buffer;
  1713. Inc(tmpBuffer);
  1714. valBuffer := PSDOInteger(tmpBuffer);
  1715. obj := Create_Field();
  1716. obj.setLong(buffer,F_OFFSET_0,VAL_1);
  1717. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1718. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1719. CheckEquals(VAL_1,valBuffer^);
  1720. obj.setLong(buffer,F_OFFSET_0,VAL_2);
  1721. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1722. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1723. CheckEquals(VAL_2,valBuffer^);
  1724. obj.setLong(buffer,F_OFFSET_0,VAL_3);
  1725. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1726. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1727. CheckEquals(VAL_3,valBuffer^);
  1728. intVal := 0;
  1729. Inc(tmpBuffer);
  1730. Inc(attributeBuffer);
  1731. valBuffer := PSDOInteger(tmpBuffer);
  1732. obj.setLong(buffer,F_OFFSET_1,VAL_1);
  1733. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1734. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1735. CheckEquals(VAL_1,valBuffer^);
  1736. obj.setLong(buffer,F_OFFSET_1,VAL_2);
  1737. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1738. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1739. CheckEquals(VAL_2,valBuffer^);
  1740. obj.setLong(buffer,F_OFFSET_1,VAL_3);
  1741. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1742. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1743. CheckEquals(VAL_3,valBuffer^);
  1744. end;
  1745. procedure TSDOIntegerField_Test.setShort();
  1746. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1747. VAL_1 = 123; VAL_2 = -9876; VAL_3 = 0;
  1748. var
  1749. obj : ISDOField;
  1750. intVal : QWord;
  1751. buffer, tmpBuffer, attributeBuffer : PByte;
  1752. valBuffer : PSDOInteger;
  1753. begin
  1754. intVal := 0;
  1755. buffer := @intVal;
  1756. tmpBuffer := buffer;
  1757. attributeBuffer := buffer;
  1758. Inc(tmpBuffer);
  1759. valBuffer := PSDOInteger(tmpBuffer);
  1760. obj := Create_Field();
  1761. obj.setShort(buffer,F_OFFSET_0,VAL_1);
  1762. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1763. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1764. CheckEquals(VAL_1,valBuffer^);
  1765. obj.setShort(buffer,F_OFFSET_0,VAL_2);
  1766. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1767. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1768. CheckEquals(VAL_2,valBuffer^);
  1769. obj.setShort(buffer,F_OFFSET_0,VAL_3);
  1770. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1771. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1772. CheckEquals(VAL_3,valBuffer^);
  1773. intVal := 0;
  1774. Inc(tmpBuffer);
  1775. Inc(attributeBuffer);
  1776. valBuffer := PSDOInteger(tmpBuffer);
  1777. obj.setShort(buffer,F_OFFSET_1,VAL_1);
  1778. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1779. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1780. CheckEquals(VAL_1,valBuffer^);
  1781. obj.setShort(buffer,F_OFFSET_1,VAL_2);
  1782. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1783. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1784. CheckEquals(VAL_2,valBuffer^);
  1785. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  1786. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1787. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1788. CheckEquals(VAL_3,valBuffer^);
  1789. end;
  1790. procedure TSDOIntegerField_Test.setString();
  1791. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1792. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1793. var
  1794. obj : ISDOField;
  1795. intVal : QWord;
  1796. buffer, tmpBuffer, attributeBuffer : PByte;
  1797. valBuffer : PSDOInteger;
  1798. begin
  1799. intVal := 0;
  1800. buffer := @intVal;
  1801. tmpBuffer := buffer;
  1802. attributeBuffer := buffer;
  1803. Inc(tmpBuffer);
  1804. valBuffer := PSDOInteger(tmpBuffer);
  1805. obj := Create_Field();
  1806. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_1));
  1807. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1808. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1809. CheckEquals(VAL_1,valBuffer^);
  1810. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_2));
  1811. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1812. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1813. CheckEquals(VAL_2,valBuffer^);
  1814. intVal := 0;
  1815. Inc(tmpBuffer);
  1816. Inc(attributeBuffer);
  1817. valBuffer := PSDOInteger(tmpBuffer);
  1818. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_1));
  1819. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1820. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1821. CheckEquals(VAL_1,valBuffer^);
  1822. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_2));
  1823. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1824. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1825. CheckEquals(VAL_2,valBuffer^);
  1826. end;
  1827. procedure TSDOIntegerField_Test.setVariant();
  1828. const
  1829. F_OFFSET = 0;
  1830. SAMPLE_VALUES : array[0..5] of TSDOInteger = (-98765,-678,0,1,12,456789);
  1831. var
  1832. obj : ISDOField;
  1833. intVal : QWord;
  1834. buffer : PByte;
  1835. v : Variant;
  1836. i : Integer;
  1837. begin
  1838. intVal := 0;
  1839. buffer := @intVal;
  1840. obj := Create_Field();
  1841. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  1842. obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  1843. CheckEquals(SAMPLE_VALUES[i],obj.getInteger(buffer,F_OFFSET));
  1844. end;
  1845. end;
  1846. { TSDOStringField_Test }
  1847. class procedure TSDOStringField_Test.CleanUpBuffer(var ABuffer : PPSDOString);
  1848. begin
  1849. if ( ABuffer <> nil ) then begin
  1850. ABuffer^^ := '';
  1851. FreeMem(ABuffer^,SizeOf(PSDOString));
  1852. ABuffer^ := nil;
  1853. end;
  1854. end;
  1855. function TSDOStringField_Test.Create_Field() : ISDOField;
  1856. begin
  1857. Result := TSDOBaseStringField.Create();
  1858. end;
  1859. procedure TSDOStringField_Test.getBoolean();
  1860. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1861. VAL_1 = 'azerty12345'; VAL_2 = 'true'; VAL_3 = 'false'; VAL_4 = '1'; VAL_5 = '0';
  1862. var
  1863. obj : ISDOField;
  1864. trueBuffer : array[0..200] of Byte;
  1865. buffer, tmpBuffer, startBuffer : PByte;
  1866. valBuffer : PPSDOString;
  1867. ok : Boolean;
  1868. begin
  1869. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1870. buffer := @(trueBuffer[0]);
  1871. tmpBuffer := buffer;
  1872. startBuffer := tmpBuffer;
  1873. Inc(tmpBuffer);
  1874. valBuffer := PPSDOString(tmpBuffer);
  1875. obj := Create_Field();
  1876. ok := False;
  1877. try
  1878. obj.getBoolean(buffer,F_OFFSET_0);
  1879. except
  1880. on e : ESDOInvalidConversionException do begin
  1881. ok := True;
  1882. end;
  1883. end;
  1884. CheckEquals(True,ok,'Invalid conversion of empty string');
  1885. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1886. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1887. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1888. try
  1889. valBuffer^^ := VAL_1;
  1890. ok := False;
  1891. try
  1892. obj.getBoolean(buffer,F_OFFSET_0);
  1893. except
  1894. on e : ESDOInvalidConversionException do begin
  1895. ok := True;
  1896. end;
  1897. end;
  1898. CheckEquals(True,ok,'Invalid conversion : ' + VAL_1);
  1899. valBuffer^^ := VAL_2;
  1900. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  1901. valBuffer^^ := VAL_3;
  1902. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  1903. valBuffer^^ := VAL_4;
  1904. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  1905. valBuffer^^ := VAL_5;
  1906. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  1907. valBuffer^^ := '';
  1908. finally
  1909. FreeMem(valBuffer^,SizeOf(PSDOString));
  1910. valBuffer^ := nil;
  1911. end;
  1912. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1913. startBuffer := tmpBuffer;
  1914. Inc(tmpBuffer);
  1915. valBuffer := PPSDOString(tmpBuffer);
  1916. ok := False;
  1917. try
  1918. obj.getInteger(buffer,F_OFFSET_1);
  1919. except
  1920. on e : ESDOInvalidConversionException do begin
  1921. ok := True;
  1922. end;
  1923. end;
  1924. CheckEquals(True,ok,'Invalid Conversion');
  1925. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1926. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1927. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1928. try
  1929. valBuffer^^ := VAL_1;
  1930. valBuffer^^ := VAL_1;
  1931. ok := False;
  1932. try
  1933. obj.getBoolean(buffer,F_OFFSET_1);
  1934. except
  1935. on e : ESDOInvalidConversionException do begin
  1936. ok := True;
  1937. end;
  1938. end;
  1939. CheckEquals(True,ok,'Invalid conversion : ' + VAL_1);
  1940. valBuffer^^ := VAL_2;
  1941. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  1942. valBuffer^^ := VAL_3;
  1943. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  1944. valBuffer^^ := VAL_4;
  1945. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  1946. valBuffer^^ := VAL_5;
  1947. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  1948. finally
  1949. valBuffer^^ := '';
  1950. FreeMem(valBuffer^,SizeOf(PSDOString));
  1951. valBuffer^ := nil;
  1952. end;
  1953. end;
  1954. procedure TSDOStringField_Test.getByte();
  1955. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1956. VAL_1 = 'azerty12345'; VAL_2 = '12'; VAL_3 = '34'; VAL_4 = '0';
  1957. var
  1958. obj : ISDOField;
  1959. trueBuffer : array[0..200] of Byte;
  1960. buffer, tmpBuffer, startBuffer : PByte;
  1961. valBuffer : PPSDOString;
  1962. ok : Boolean;
  1963. begin
  1964. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1965. buffer := @(trueBuffer[0]);
  1966. tmpBuffer := buffer;
  1967. startBuffer := tmpBuffer;
  1968. Inc(tmpBuffer);
  1969. valBuffer := PPSDOString(tmpBuffer);
  1970. obj := Create_Field();
  1971. ok := False;
  1972. try
  1973. obj.getByte(buffer,F_OFFSET_0);
  1974. except
  1975. on e : ESDOInvalidConversionException do begin
  1976. ok := True;
  1977. end;
  1978. end;
  1979. CheckEquals(True,ok,'Invalid conversion');
  1980. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1981. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1982. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1983. try
  1984. valBuffer^^ := VAL_1;
  1985. ok := False;
  1986. try
  1987. obj.getByte(buffer,F_OFFSET_0);
  1988. except
  1989. on e : ESDOInvalidConversionException do begin
  1990. ok := True;
  1991. end;
  1992. end;
  1993. CheckEquals(True,ok,'Invalid conversion');
  1994. valBuffer^^ := VAL_2;
  1995. CheckEquals(StrToInt(VAL_2),obj.getByte(buffer,F_OFFSET_0));
  1996. valBuffer^^ := VAL_3;
  1997. CheckEquals(StrToInt(VAL_3),obj.getByte(buffer,F_OFFSET_0));
  1998. valBuffer^^ := VAL_4;
  1999. CheckEquals(StrToInt(VAL_4),obj.getByte(buffer,F_OFFSET_0));
  2000. valBuffer^^ := '';
  2001. finally
  2002. FreeMem(valBuffer^,SizeOf(PSDOString));
  2003. valBuffer^ := nil;
  2004. end;
  2005. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2006. startBuffer := tmpBuffer;
  2007. Inc(tmpBuffer);
  2008. valBuffer := PPSDOString(tmpBuffer);
  2009. ok := False;
  2010. try
  2011. obj.getByte(buffer,F_OFFSET_1);
  2012. except
  2013. on e : ESDOInvalidConversionException do begin
  2014. ok := True;
  2015. end;
  2016. end;
  2017. CheckEquals(True,ok,'Invalid Conversion');
  2018. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2019. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2020. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2021. try
  2022. valBuffer^^ := VAL_1;
  2023. ok := False;
  2024. try
  2025. obj.getByte(buffer,F_OFFSET_1);
  2026. except
  2027. on e : ESDOInvalidConversionException do begin
  2028. ok := True;
  2029. end;
  2030. end;
  2031. CheckEquals(True,ok,'Invalid conversion');
  2032. valBuffer^^ := VAL_2;
  2033. CheckEquals(StrToInt(VAL_2),obj.getByte(buffer,F_OFFSET_1));
  2034. valBuffer^^ := VAL_3;
  2035. CheckEquals(StrToInt(VAL_3),obj.getByte(buffer,F_OFFSET_1));
  2036. valBuffer^^ := VAL_4;
  2037. CheckEquals(StrToInt(VAL_4),obj.getByte(buffer,F_OFFSET_1));
  2038. valBuffer^^ := '';
  2039. finally
  2040. FreeMem(valBuffer^,SizeOf(PSDOString));
  2041. valBuffer^ := nil;
  2042. end;
  2043. end;
  2044. procedure TSDOStringField_Test.getCharacter();
  2045. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2046. VAL_1 = 'K'; VAL_2 = 'w'; VAL_3 = #0;
  2047. var
  2048. obj : ISDOField;
  2049. trueBuffer : array[0..200] of Byte;
  2050. buffer, tmpBuffer, startBuffer : PByte;
  2051. valBuffer : PPSDOString;
  2052. ok : Boolean;
  2053. begin
  2054. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2055. buffer := @(trueBuffer[0]);
  2056. tmpBuffer := buffer;
  2057. startBuffer := tmpBuffer;
  2058. Inc(tmpBuffer);
  2059. valBuffer := PPSDOString(tmpBuffer);
  2060. obj := Create_Field();
  2061. ok := False;
  2062. try
  2063. obj.getCharacter(buffer,F_OFFSET_0);
  2064. except
  2065. on e : ESDOInvalidConversionException do begin
  2066. ok := True;
  2067. end;
  2068. end;
  2069. CheckEquals(True,ok,'Invalid conversion');
  2070. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2071. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2072. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2073. try
  2074. valBuffer^^ := VAL_1;
  2075. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_0));
  2076. valBuffer^^ := VAL_2;
  2077. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_0));
  2078. valBuffer^^ := VAL_3;
  2079. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_0));
  2080. valBuffer^^ := '';
  2081. finally
  2082. FreeMem(valBuffer^,SizeOf(PSDOString));
  2083. valBuffer^ := nil;
  2084. end;
  2085. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2086. startBuffer := tmpBuffer;
  2087. Inc(tmpBuffer);
  2088. valBuffer := PPSDOString(tmpBuffer);
  2089. ok := False;
  2090. try
  2091. obj.getCharacter(buffer,F_OFFSET_1);
  2092. except
  2093. on e : ESDOInvalidConversionException do begin
  2094. ok := True;
  2095. end;
  2096. end;
  2097. CheckEquals(True,ok,'Invalid Conversion');
  2098. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2099. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2100. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2101. try
  2102. valBuffer^^ := VAL_1;
  2103. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_1));
  2104. valBuffer^^ := VAL_2;
  2105. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_1));
  2106. valBuffer^^ := VAL_3;
  2107. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_1));
  2108. valBuffer^^ := '';
  2109. finally
  2110. FreeMem(valBuffer^,SizeOf(PSDOString));
  2111. valBuffer^ := nil;
  2112. end;
  2113. end;
  2114. procedure TSDOStringField_Test.getInteger();
  2115. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2116. VAL_1 = 'azerty12345'; VAL_2 = '-9876'; VAL_3 = '567'; VAL_4 = '0';
  2117. var
  2118. obj : ISDOField;
  2119. trueBuffer : array[0..200] of Byte;
  2120. buffer, tmpBuffer, startBuffer : PByte;
  2121. valBuffer : PPSDOString;
  2122. ok : Boolean;
  2123. begin
  2124. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2125. buffer := @(trueBuffer[0]);
  2126. tmpBuffer := buffer;
  2127. startBuffer := tmpBuffer;
  2128. Inc(tmpBuffer);
  2129. valBuffer := PPSDOString(tmpBuffer);
  2130. obj := Create_Field();
  2131. ok := False;
  2132. try
  2133. obj.getInteger(buffer,F_OFFSET_0);
  2134. except
  2135. on e : ESDOInvalidConversionException do begin
  2136. ok := True;
  2137. end;
  2138. end;
  2139. CheckEquals(True,ok,'Invalid conversion');
  2140. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2141. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2142. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2143. try
  2144. valBuffer^^ := VAL_1;
  2145. ok := False;
  2146. try
  2147. obj.getInteger(buffer,F_OFFSET_0);
  2148. except
  2149. on e : ESDOInvalidConversionException do begin
  2150. ok := True;
  2151. end;
  2152. end;
  2153. CheckEquals(True,ok,'Invalid conversion');
  2154. valBuffer^^ := VAL_2;
  2155. CheckEquals(StrToInt(VAL_2),obj.getInteger(buffer,F_OFFSET_0));
  2156. valBuffer^^ := VAL_3;
  2157. CheckEquals(StrToInt(VAL_3),obj.getInteger(buffer,F_OFFSET_0));
  2158. valBuffer^^ := VAL_4;
  2159. CheckEquals(StrToInt(VAL_4),obj.getInteger(buffer,F_OFFSET_0));
  2160. valBuffer^^ := '';
  2161. finally
  2162. FreeMem(valBuffer^,SizeOf(PSDOString));
  2163. valBuffer^ := nil;
  2164. end;
  2165. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2166. startBuffer := tmpBuffer;
  2167. Inc(tmpBuffer);
  2168. valBuffer := PPSDOString(tmpBuffer);
  2169. ok := False;
  2170. try
  2171. obj.getInteger(buffer,F_OFFSET_1);
  2172. except
  2173. on e : ESDOInvalidConversionException do begin
  2174. ok := True;
  2175. end;
  2176. end;
  2177. CheckEquals(True,ok,'Invalid Conversion');
  2178. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2179. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2180. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2181. try
  2182. valBuffer^^ := VAL_1;
  2183. ok := False;
  2184. try
  2185. obj.getInteger(buffer,F_OFFSET_1);
  2186. except
  2187. on e : ESDOInvalidConversionException do begin
  2188. ok := True;
  2189. end;
  2190. end;
  2191. CheckEquals(True,ok,'Invalid conversion');
  2192. valBuffer^^ := VAL_2;
  2193. CheckEquals(StrToInt(VAL_2),obj.getInteger(buffer,F_OFFSET_1));
  2194. valBuffer^^ := VAL_3;
  2195. CheckEquals(StrToInt(VAL_3),obj.getInteger(buffer,F_OFFSET_1));
  2196. valBuffer^^ := VAL_4;
  2197. CheckEquals(StrToInt(VAL_4),obj.getInteger(buffer,F_OFFSET_1));
  2198. valBuffer^^ := '';
  2199. finally
  2200. FreeMem(valBuffer^,SizeOf(PSDOString));
  2201. valBuffer^ := nil;
  2202. end;
  2203. end;
  2204. procedure TSDOStringField_Test.getLong();
  2205. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2206. VAL_1 = 'azerty12345'; VAL_2 = '123456852'; VAL_3 = '-3489962255'; VAL_4 = '0';
  2207. var
  2208. obj : ISDOField;
  2209. trueBuffer : array[0..200] of Byte;
  2210. buffer, tmpBuffer, startBuffer : PByte;
  2211. valBuffer : PPSDOString;
  2212. ok : Boolean;
  2213. begin
  2214. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2215. buffer := @(trueBuffer[0]);
  2216. tmpBuffer := buffer;
  2217. startBuffer := tmpBuffer;
  2218. Inc(tmpBuffer);
  2219. valBuffer := PPSDOString(tmpBuffer);
  2220. obj := Create_Field();
  2221. ok := False;
  2222. try
  2223. obj.getLong(buffer,F_OFFSET_0);
  2224. except
  2225. on e : ESDOInvalidConversionException do begin
  2226. ok := True;
  2227. end;
  2228. end;
  2229. CheckEquals(True,ok,'Invalid conversion');
  2230. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2231. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2232. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2233. try
  2234. valBuffer^^ := VAL_1;
  2235. ok := False;
  2236. try
  2237. obj.getLong(buffer,F_OFFSET_0);
  2238. except
  2239. on e : ESDOInvalidConversionException do begin
  2240. ok := True;
  2241. end;
  2242. end;
  2243. CheckEquals(True,ok,'Invalid conversion');
  2244. valBuffer^^ := VAL_2;
  2245. CheckEquals(StrToInt64(VAL_2),obj.getLong(buffer,F_OFFSET_0));
  2246. valBuffer^^ := VAL_3;
  2247. CheckEquals(StrToInt64(VAL_3),obj.getLong(buffer,F_OFFSET_0));
  2248. valBuffer^^ := VAL_4;
  2249. CheckEquals(StrToInt64(VAL_4),obj.getLong(buffer,F_OFFSET_0));
  2250. valBuffer^^ := '';
  2251. finally
  2252. FreeMem(valBuffer^,SizeOf(PSDOString));
  2253. valBuffer^ := nil;
  2254. end;
  2255. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2256. startBuffer := tmpBuffer;
  2257. Inc(tmpBuffer);
  2258. valBuffer := PPSDOString(tmpBuffer);
  2259. ok := False;
  2260. try
  2261. obj.getLong(buffer,F_OFFSET_1);
  2262. except
  2263. on e : ESDOInvalidConversionException do begin
  2264. ok := True;
  2265. end;
  2266. end;
  2267. CheckEquals(True,ok,'Invalid Conversion');
  2268. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2269. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2270. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2271. try
  2272. valBuffer^^ := VAL_1;
  2273. ok := False;
  2274. try
  2275. obj.getLong(buffer,F_OFFSET_1);
  2276. except
  2277. on e : ESDOInvalidConversionException do begin
  2278. ok := True;
  2279. end;
  2280. end;
  2281. CheckEquals(True,ok,'Invalid conversion');
  2282. valBuffer^^ := VAL_2;
  2283. CheckEquals(StrToInt64(VAL_2),obj.getLong(buffer,F_OFFSET_1));
  2284. valBuffer^^ := VAL_3;
  2285. CheckEquals(StrToInt64(VAL_3),obj.getLong(buffer,F_OFFSET_1));
  2286. valBuffer^^ := VAL_4;
  2287. CheckEquals(StrToInt64(VAL_4),obj.getLong(buffer,F_OFFSET_1));
  2288. valBuffer^^ := '';
  2289. finally
  2290. FreeMem(valBuffer^,SizeOf(PSDOString));
  2291. valBuffer^ := nil;
  2292. end;
  2293. end;
  2294. procedure TSDOStringField_Test.getShort();
  2295. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2296. VAL_1 = 'azerty12345'; VAL_2 = '5678'; VAL_3 = '-3489'; VAL_4 = '0';
  2297. var
  2298. obj : ISDOField;
  2299. trueBuffer : array[0..200] of Byte;
  2300. buffer, tmpBuffer, startBuffer : PByte;
  2301. valBuffer : PPSDOString;
  2302. ok : Boolean;
  2303. begin
  2304. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2305. buffer := @(trueBuffer[0]);
  2306. tmpBuffer := buffer;
  2307. startBuffer := tmpBuffer;
  2308. Inc(tmpBuffer);
  2309. valBuffer := PPSDOString(tmpBuffer);
  2310. obj := Create_Field();
  2311. ok := False;
  2312. try
  2313. obj.getShort(buffer,F_OFFSET_0);
  2314. except
  2315. on e : ESDOInvalidConversionException do begin
  2316. ok := True;
  2317. end;
  2318. end;
  2319. CheckEquals(True,ok,'Invalid conversion');
  2320. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2321. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2322. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2323. try
  2324. valBuffer^^ := VAL_1;
  2325. ok := False;
  2326. try
  2327. obj.getShort(buffer,F_OFFSET_0);
  2328. except
  2329. on e : ESDOInvalidConversionException do begin
  2330. ok := True;
  2331. end;
  2332. end;
  2333. CheckEquals(True,ok,'Invalid conversion');
  2334. valBuffer^^ := VAL_2;
  2335. CheckEquals(StrToInt(VAL_2),obj.getShort(buffer,F_OFFSET_0));
  2336. valBuffer^^ := VAL_3;
  2337. CheckEquals(StrToInt(VAL_3),obj.getShort(buffer,F_OFFSET_0));
  2338. valBuffer^^ := VAL_4;
  2339. CheckEquals(StrToInt(VAL_4),obj.getShort(buffer,F_OFFSET_0));
  2340. valBuffer^^ := '';
  2341. finally
  2342. FreeMem(valBuffer^,SizeOf(PSDOString));
  2343. valBuffer^ := nil;
  2344. end;
  2345. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2346. startBuffer := tmpBuffer;
  2347. Inc(tmpBuffer);
  2348. valBuffer := PPSDOString(tmpBuffer);
  2349. ok := False;
  2350. try
  2351. obj.getShort(buffer,F_OFFSET_1);
  2352. except
  2353. on e : ESDOInvalidConversionException do begin
  2354. ok := True;
  2355. end;
  2356. end;
  2357. CheckEquals(True,ok,'Invalid Conversion');
  2358. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2359. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2360. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2361. try
  2362. valBuffer^^ := VAL_1;
  2363. ok := False;
  2364. try
  2365. obj.getShort(buffer,F_OFFSET_1);
  2366. except
  2367. on e : ESDOInvalidConversionException do begin
  2368. ok := True;
  2369. end;
  2370. end;
  2371. CheckEquals(True,ok,'Invalid conversion');
  2372. valBuffer^^ := VAL_2;
  2373. CheckEquals(StrToInt(VAL_2),obj.getShort(buffer,F_OFFSET_1));
  2374. valBuffer^^ := VAL_3;
  2375. CheckEquals(StrToInt(VAL_3),obj.getShort(buffer,F_OFFSET_1));
  2376. valBuffer^^ := VAL_4;
  2377. CheckEquals(StrToInt(VAL_4),obj.getShort(buffer,F_OFFSET_1));
  2378. valBuffer^^ := '';
  2379. finally
  2380. FreeMem(valBuffer^,SizeOf(PSDOString));
  2381. valBuffer^ := nil;
  2382. end;
  2383. end;
  2384. procedure TSDOStringField_Test.getString();
  2385. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2386. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2387. var
  2388. obj : ISDOField;
  2389. trueBuffer : array[0..200] of Byte;
  2390. buffer, tmpBuffer, startBuffer : PByte;
  2391. valBuffer : PPSDOString;
  2392. begin
  2393. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2394. buffer := @(trueBuffer[0]);
  2395. tmpBuffer := buffer;
  2396. startBuffer := tmpBuffer;
  2397. Inc(tmpBuffer);
  2398. valBuffer := PPSDOString(tmpBuffer);
  2399. obj := Create_Field();
  2400. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2401. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2402. try
  2403. valBuffer^^ := VAL_1;
  2404. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2405. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2406. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2407. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2408. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2409. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2410. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2411. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2412. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2413. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2414. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2415. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2416. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2417. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2418. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2419. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2420. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2421. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2422. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2423. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2424. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2425. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2426. valBuffer^^ := VAL_2;
  2427. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2428. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2429. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2430. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2431. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2432. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2433. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2434. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2435. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2436. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2437. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2438. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2439. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2440. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2441. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2442. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2443. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2444. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2445. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2446. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2447. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2448. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2449. valBuffer^^ := VAL_3;
  2450. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2451. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2452. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2453. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2454. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2455. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2456. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2457. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2458. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2459. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2460. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2461. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2462. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2463. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2464. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2465. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2466. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2467. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2468. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2469. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2470. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2471. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2472. valBuffer^^ := '';
  2473. finally
  2474. FreeMem(valBuffer^,SizeOf(PSDOString));
  2475. valBuffer^ := nil;
  2476. end;
  2477. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2478. startBuffer := tmpBuffer;
  2479. Inc(tmpBuffer);
  2480. valBuffer := PPSDOString(tmpBuffer);
  2481. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2482. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2483. try
  2484. valBuffer^^ := VAL_1;
  2485. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2486. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2487. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2488. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2489. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2490. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2491. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2492. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2493. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2494. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2495. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2496. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2497. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2498. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2499. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2500. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2501. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2502. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2503. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2504. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2505. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2506. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2507. valBuffer^^ := VAL_2;
  2508. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2509. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2510. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2511. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2512. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2513. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2514. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2515. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2516. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2517. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2518. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2519. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2520. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2521. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2522. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2523. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2524. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2525. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2526. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2527. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2528. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2529. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2530. valBuffer^^ := VAL_3;
  2531. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2532. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2533. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2534. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2535. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2536. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2537. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2538. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2539. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2540. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2541. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2542. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2543. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2544. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2545. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2546. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2547. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2548. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2549. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2550. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2551. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2552. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2553. valBuffer^^ := '';
  2554. finally
  2555. FreeMem(valBuffer^,SizeOf(PSDOString));
  2556. valBuffer^ := nil;
  2557. end;
  2558. end;
  2559. procedure TSDOStringField_Test.getVariant();
  2560. const
  2561. F_OFFSET = 0;
  2562. SAMPLE_VALUES : array[0..9] of TSDOString = (
  2563. 'AZERTY', 'QWERTY', 'Service Data Object', 'S', 'D', 'O',
  2564. 'WEIRD STRING'#0'Sample', #0#0, '0123456789', '#!'
  2565. );
  2566. var
  2567. obj : ISDOField;
  2568. trueBuffer : array[0..200] of Byte;
  2569. buffer : PByte;
  2570. i : Integer;
  2571. v : Variant;
  2572. begin
  2573. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2574. buffer := @(trueBuffer[0]);
  2575. obj := Create_Field();
  2576. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  2577. obj.setString(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  2578. v := obj.getVariant(buffer,F_OFFSET);
  2579. CheckEquals(SAMPLE_VALUES[i],TSDOString(v));
  2580. end;
  2581. end;
  2582. procedure TSDOStringField_Test.setBoolean();
  2583. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2584. var
  2585. obj : ISDOField;
  2586. trueBuffer : array[0..200] of Byte;
  2587. buffer, tmpBuffer : PByte;
  2588. valBuffer : PPSDOString;
  2589. begin
  2590. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2591. buffer := @(trueBuffer[0]);
  2592. tmpBuffer := buffer;
  2593. Inc(tmpBuffer);
  2594. valBuffer := PPSDOString(tmpBuffer);
  2595. obj := Create_Field();
  2596. obj.setBoolean(buffer,F_OFFSET_0,True);
  2597. CheckEquals('1',valBuffer^^);
  2598. obj.setBoolean(buffer,F_OFFSET_0,False);
  2599. CheckEquals('0',valBuffer^^);
  2600. // Clean up to avoid false MEM-LEAK
  2601. CleanUpBuffer(valBuffer);
  2602. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2603. Inc(tmpBuffer);
  2604. valBuffer := PPSDOString(tmpBuffer);
  2605. obj.setBoolean(buffer,F_OFFSET_1,True);
  2606. CheckEquals('1',valBuffer^^);
  2607. obj.setBoolean(buffer,F_OFFSET_1,False);
  2608. CheckEquals('0',valBuffer^^);
  2609. // Clean up to avoid false MEM-LEAK
  2610. CleanUpBuffer(valBuffer);
  2611. end;
  2612. procedure TSDOStringField_Test.setByte();
  2613. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2614. VAL_1 = '123'; VAL_2 = '45'; VAL_3 = '0';
  2615. var
  2616. obj : ISDOField;
  2617. trueBuffer : array[0..200] of Byte;
  2618. buffer, tmpBuffer, startBuffer : PByte;
  2619. valBuffer : PPSDOString;
  2620. begin
  2621. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2622. buffer := @(trueBuffer[0]);
  2623. tmpBuffer := buffer;
  2624. startBuffer := tmpBuffer;
  2625. Inc(tmpBuffer);
  2626. valBuffer := PPSDOString(tmpBuffer);
  2627. obj := Create_Field();
  2628. obj.setByte(buffer,F_OFFSET_0,StrToInt(VAL_1));
  2629. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2630. obj.setByte(buffer,F_OFFSET_0,StrToInt(VAL_2));
  2631. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2632. obj.setByte(buffer,F_OFFSET_0,StrToInt(VAL_3));
  2633. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2634. // Clean up to avoid false MEM-LEAK
  2635. CleanUpBuffer(valBuffer);
  2636. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2637. startBuffer := tmpBuffer;
  2638. Inc(tmpBuffer);
  2639. valBuffer := PPSDOString(tmpBuffer);
  2640. obj.setByte(buffer,F_OFFSET_1,StrToInt(VAL_1));
  2641. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2642. obj.setByte(buffer,F_OFFSET_1,StrToInt(VAL_2));
  2643. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2644. obj.setByte(buffer,F_OFFSET_1,StrToInt(VAL_3));
  2645. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2646. // Clean up to avoid false MEM-LEAK
  2647. CleanUpBuffer(valBuffer);
  2648. end;
  2649. procedure TSDOStringField_Test.setCharacter();
  2650. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2651. VAL_1 = 'K'; VAL_2 = 'W'; VAL_3 = #0;
  2652. var
  2653. obj : ISDOField;
  2654. trueBuffer : array[0..200] of Byte;
  2655. buffer, tmpBuffer, startBuffer : PByte;
  2656. valBuffer : PPSDOString;
  2657. begin
  2658. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2659. buffer := @(trueBuffer[0]);
  2660. tmpBuffer := buffer;
  2661. startBuffer := tmpBuffer;
  2662. Inc(tmpBuffer);
  2663. valBuffer := PPSDOString(tmpBuffer);
  2664. obj := Create_Field();
  2665. obj.setCharacter(buffer,F_OFFSET_0,VAL_1);
  2666. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2667. obj.setCharacter(buffer,F_OFFSET_0,VAL_2);
  2668. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2669. obj.setCharacter(buffer,F_OFFSET_0,VAL_3);
  2670. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2671. // Clean up to avoid false MEM-LEAK
  2672. CleanUpBuffer(valBuffer);
  2673. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2674. startBuffer := tmpBuffer;
  2675. Inc(tmpBuffer);
  2676. valBuffer := PPSDOString(tmpBuffer);
  2677. obj.setCharacter(buffer,F_OFFSET_1,VAL_1);
  2678. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2679. obj.setCharacter(buffer,F_OFFSET_1,VAL_2);
  2680. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2681. obj.setCharacter(buffer,F_OFFSET_1,VAL_3);
  2682. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2683. // Clean up to avoid false MEM-LEAK
  2684. CleanUpBuffer(valBuffer);
  2685. end;
  2686. procedure TSDOStringField_Test.setInteger();
  2687. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2688. VAL_1 = '12345'; VAL_2 = '-3476'; VAL_3 = '0';
  2689. var
  2690. obj : ISDOField;
  2691. trueBuffer : array[0..200] of Byte;
  2692. buffer, tmpBuffer, startBuffer : PByte;
  2693. valBuffer : PPSDOString;
  2694. begin
  2695. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2696. buffer := @(trueBuffer[0]);
  2697. tmpBuffer := buffer;
  2698. startBuffer := tmpBuffer;
  2699. Inc(tmpBuffer);
  2700. valBuffer := PPSDOString(tmpBuffer);
  2701. obj := Create_Field();
  2702. obj.setInteger(buffer,F_OFFSET_0,StrToInt(VAL_1));
  2703. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2704. obj.setInteger(buffer,F_OFFSET_0,StrToInt(VAL_2));
  2705. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2706. obj.setInteger(buffer,F_OFFSET_0,StrToInt(VAL_3));
  2707. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2708. // Clean up to avoid false MEM-LEAK
  2709. CleanUpBuffer(valBuffer);
  2710. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2711. startBuffer := tmpBuffer;
  2712. Inc(tmpBuffer);
  2713. valBuffer := PPSDOString(tmpBuffer);
  2714. obj.setInteger(buffer,F_OFFSET_1,StrToInt(VAL_1));
  2715. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2716. obj.setInteger(buffer,F_OFFSET_1,StrToInt(VAL_2));
  2717. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2718. obj.setInteger(buffer,F_OFFSET_1,StrToInt(VAL_3));
  2719. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2720. // Clean up to avoid false MEM-LEAK
  2721. CleanUpBuffer(valBuffer);
  2722. end;
  2723. procedure TSDOStringField_Test.setLong();
  2724. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2725. VAL_1 = '123456852'; VAL_2 = '3489962255'; VAL_3 = '0';
  2726. var
  2727. obj : ISDOField;
  2728. trueBuffer : array[0..200] of Byte;
  2729. buffer, tmpBuffer, startBuffer : PByte;
  2730. valBuffer : PPSDOString;
  2731. begin
  2732. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2733. buffer := @(trueBuffer[0]);
  2734. tmpBuffer := buffer;
  2735. startBuffer := tmpBuffer;
  2736. Inc(tmpBuffer);
  2737. valBuffer := PPSDOString(tmpBuffer);
  2738. obj := Create_Field();
  2739. obj.setLong(buffer,F_OFFSET_0,StrToInt64(VAL_1));
  2740. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2741. obj.setLong(buffer,F_OFFSET_0,StrToInt64(VAL_2));
  2742. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2743. obj.setLong(buffer,F_OFFSET_0,StrToInt64(VAL_3));
  2744. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2745. // Clean up to avoid false MEM-LEAK
  2746. CleanUpBuffer(valBuffer);
  2747. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2748. startBuffer := tmpBuffer;
  2749. Inc(tmpBuffer);
  2750. valBuffer := PPSDOString(tmpBuffer);
  2751. obj.setLong(buffer,F_OFFSET_1,StrToInt64(VAL_1));
  2752. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2753. obj.setLong(buffer,F_OFFSET_1,StrToInt64(VAL_2));
  2754. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2755. obj.setLong(buffer,F_OFFSET_1,StrToInt64(VAL_3));
  2756. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2757. // Clean up to avoid false MEM-LEAK
  2758. CleanUpBuffer(valBuffer);
  2759. end;
  2760. procedure TSDOStringField_Test.setNull();
  2761. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2762. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2763. var
  2764. obj : ISDOField;
  2765. trueBuffer : array[0..200] of Byte;
  2766. buffer, tmpBuffer, startBuffer : PByte;
  2767. valBuffer : PPSDOString;
  2768. begin
  2769. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2770. buffer := @(trueBuffer[0]);
  2771. tmpBuffer := buffer;
  2772. startBuffer := tmpBuffer;
  2773. Inc(tmpBuffer);
  2774. valBuffer := PPSDOString(tmpBuffer);
  2775. obj := Create_Field();
  2776. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2777. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2778. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2779. obj.setNull(buffer,F_OFFSET_0);
  2780. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2781. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2782. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2783. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2784. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2785. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2786. obj.setNull(buffer,F_OFFSET_0);
  2787. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2788. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2789. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2790. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2791. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2792. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2793. obj.setNull(buffer,F_OFFSET_0);
  2794. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2795. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2796. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2797. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2798. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2799. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2800. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2801. valBuffer^^ := VAL_1;
  2802. obj.setNull(buffer,F_OFFSET_0);
  2803. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2804. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2805. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2806. Check(valBuffer^ = nil);
  2807. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2808. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2809. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2810. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2811. valBuffer^^ := VAL_2;
  2812. obj.setNull(buffer,F_OFFSET_0);
  2813. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2814. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2815. Check(valBuffer^ = nil);
  2816. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2817. startBuffer := tmpBuffer;
  2818. Inc(tmpBuffer);
  2819. valBuffer := PPSDOString(tmpBuffer);
  2820. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2821. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2822. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2823. obj.setNull(buffer,F_OFFSET_1);
  2824. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2825. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2826. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2827. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2828. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2829. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2830. obj.setNull(buffer,F_OFFSET_1);
  2831. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2832. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2833. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2834. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2835. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2836. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2837. obj.setNull(buffer,F_OFFSET_1);
  2838. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2839. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2840. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2841. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2842. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2843. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2844. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2845. valBuffer^^ := VAL_1;
  2846. obj.setNull(buffer,F_OFFSET_1);
  2847. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2848. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2849. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2850. Check(valBuffer^ = nil);
  2851. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2852. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2853. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2854. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2855. valBuffer^^ := VAL_2;
  2856. obj.setNull(buffer,F_OFFSET_1);
  2857. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2858. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2859. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2860. Check(valBuffer^ = nil);
  2861. end;
  2862. procedure TSDOStringField_Test.setShort();
  2863. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2864. VAL_1 = '6852'; VAL_2 = '-255'; VAL_3 = '0';
  2865. var
  2866. obj : ISDOField;
  2867. trueBuffer : array[0..200] of Byte;
  2868. buffer, tmpBuffer, startBuffer : PByte;
  2869. valBuffer : PPSDOString;
  2870. begin
  2871. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2872. buffer := @(trueBuffer[0]);
  2873. tmpBuffer := buffer;
  2874. startBuffer := tmpBuffer;
  2875. Inc(tmpBuffer);
  2876. valBuffer := PPSDOString(tmpBuffer);
  2877. obj := Create_Field();
  2878. obj.setShort(buffer,F_OFFSET_0,StrToInt(VAL_1));
  2879. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2880. obj.setShort(buffer,F_OFFSET_0,StrToInt(VAL_2));
  2881. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2882. obj.setShort(buffer,F_OFFSET_0,StrToInt(VAL_3));
  2883. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2884. // Clean up to avoid false MEM-LEAK
  2885. CleanUpBuffer(valBuffer);
  2886. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2887. startBuffer := tmpBuffer;
  2888. Inc(tmpBuffer);
  2889. valBuffer := PPSDOString(tmpBuffer);
  2890. obj.setShort(buffer,F_OFFSET_1,StrToInt(VAL_1));
  2891. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2892. obj.setShort(buffer,F_OFFSET_1,StrToInt(VAL_2));
  2893. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2894. obj.setShort(buffer,F_OFFSET_1,StrToInt(VAL_3));
  2895. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2896. // Clean up to avoid false MEM-LEAK
  2897. CleanUpBuffer(valBuffer);
  2898. end;
  2899. procedure TSDOStringField_Test.setString();
  2900. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2901. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2902. var
  2903. obj : ISDOField;
  2904. trueBuffer : array[0..200] of Byte;
  2905. buffer, tmpBuffer, startBuffer : PByte;
  2906. valBuffer : PPSDOString;
  2907. begin
  2908. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2909. buffer := @(trueBuffer[0]);
  2910. tmpBuffer := buffer;
  2911. startBuffer := tmpBuffer;
  2912. Inc(tmpBuffer);
  2913. valBuffer := PPSDOString(tmpBuffer);
  2914. obj := Create_Field();
  2915. obj.setString(buffer,F_OFFSET_0,'');
  2916. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2917. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2918. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2919. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2920. obj.setString(buffer,F_OFFSET_0,VAL_1);
  2921. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2922. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2923. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2924. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2925. CheckEquals(VAL_1,valBuffer^^);
  2926. obj.setString(buffer,F_OFFSET_0,VAL_2);
  2927. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2928. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2929. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2930. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2931. CheckEquals(VAL_2,valBuffer^^);
  2932. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2933. obj.setString(buffer,F_OFFSET_0,VAL_3);
  2934. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2935. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2936. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2937. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2938. CheckEquals(VAL_3,valBuffer^^);
  2939. // Clean up to avoid false MEM-LEAK
  2940. CleanUpBuffer(valBuffer);
  2941. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2942. startBuffer := tmpBuffer;
  2943. Inc(tmpBuffer);
  2944. valBuffer := PPSDOString(tmpBuffer);
  2945. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2946. obj.setString(buffer,F_OFFSET_1,'');
  2947. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2948. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2949. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2950. obj.setString(buffer,F_OFFSET_1,VAL_1);
  2951. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2952. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2953. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2954. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2955. CheckEquals(VAL_1,valBuffer^^);
  2956. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2957. obj.setString(buffer,F_OFFSET_1,VAL_2);
  2958. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2959. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2960. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2961. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2962. CheckEquals(VAL_2,valBuffer^^);
  2963. obj.setString(buffer,F_OFFSET_1,VAL_3);
  2964. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2965. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2966. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2967. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2968. CheckEquals(VAL_3,valBuffer^^);
  2969. // Clean up to avoid false MEM-LEAK
  2970. CleanUpBuffer(valBuffer);
  2971. end;
  2972. procedure TSDOStringField_Test.setString_unset_setStrin;
  2973. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2974. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2975. var
  2976. obj : ISDOField;
  2977. trueBuffer : array[0..200] of Byte;
  2978. buffer, tmpBuffer, startBuffer : PByte;
  2979. valBuffer : PPSDOString;
  2980. begin
  2981. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2982. buffer := @(trueBuffer[0]);
  2983. tmpBuffer := buffer;
  2984. startBuffer := tmpBuffer;
  2985. Inc(tmpBuffer);
  2986. valBuffer := PPSDOString(tmpBuffer);
  2987. obj := Create_Field();
  2988. obj.setString(buffer,F_OFFSET_0,'');
  2989. obj.unset(buffer,F_OFFSET_0);
  2990. obj.setString(buffer,F_OFFSET_0,'');
  2991. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2992. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2993. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2994. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  2995. end;
  2996. procedure TSDOStringField_Test.setVariant();
  2997. const
  2998. F_OFFSET = 0;
  2999. SAMPLE_VALUES : array[0..9] of TSDOString = (
  3000. 'AZERTY', 'QWERTY', 'Service Data Object', 'S', 'D', 'O',
  3001. 'WEIRD STRING'#0'Sample', #0#0, '0123456789', '#!'
  3002. );
  3003. var
  3004. obj : ISDOField;
  3005. trueBuffer : array[0..200] of Byte;
  3006. buffer : PByte;
  3007. i : Integer;
  3008. begin
  3009. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3010. buffer := @(trueBuffer[0]);
  3011. obj := Create_Field();
  3012. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  3013. obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  3014. CheckEquals(SAMPLE_VALUES[i],obj.getString(buffer,F_OFFSET));
  3015. end;
  3016. end;
  3017. procedure TSDOStringField_Test.unset();
  3018. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3019. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  3020. var
  3021. obj : ISDOField;
  3022. trueBuffer : array[0..200] of Byte;
  3023. buffer, tmpBuffer, startBuffer : PByte;
  3024. valBuffer : PPSDOString;
  3025. begin
  3026. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3027. buffer := @(trueBuffer[0]);
  3028. tmpBuffer := buffer;
  3029. startBuffer := tmpBuffer;
  3030. Inc(tmpBuffer);
  3031. valBuffer := PPSDOString(tmpBuffer);
  3032. obj := Create_Field();
  3033. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3034. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3035. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3036. obj.unset(buffer,F_OFFSET_0);
  3037. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3038. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3039. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3040. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3041. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3042. obj.unset(buffer,F_OFFSET_0);
  3043. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3044. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3045. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3046. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3047. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3048. obj.unset(buffer,F_OFFSET_0);
  3049. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3050. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3051. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  3052. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3053. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3054. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3055. valBuffer^^ := VAL_1;
  3056. obj.unset(buffer,F_OFFSET_0);
  3057. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3058. CheckEquals(
  3059. True(*this is necessary for default value management*),
  3060. IsBitON(startBuffer^,BIT_ORDER_BUFFER),
  3061. 'BIT_ORDER_SET, this is necessary for default value management'
  3062. );
  3063. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  3064. CheckEquals(VAL_1, valBuffer^^);
  3065. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  3066. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  3067. SetBit(startBuffer^,BIT_ORDER_SET,True);//startBuffer^ := 2;
  3068. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3069. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3070. valBuffer^^ := VAL_2;
  3071. obj.unset(buffer,F_OFFSET_0);
  3072. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3073. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  3074. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  3075. CheckEquals(VAL_2, valBuffer^^);
  3076. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  3077. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  3078. SetBit(startBuffer^,BIT_ORDER_SET,True);//startBuffer^ := 2;
  3079. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3080. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3081. valBuffer^^ := VAL_3;
  3082. obj.unset(buffer,F_OFFSET_0);
  3083. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3084. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  3085. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  3086. CheckEquals(VAL_3, valBuffer^^);
  3087. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  3088. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3089. startBuffer := tmpBuffer;
  3090. Inc(tmpBuffer);
  3091. valBuffer := PPSDOString(tmpBuffer);
  3092. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3093. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3094. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3095. obj.unset(buffer,F_OFFSET_1);
  3096. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3097. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3098. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3099. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3100. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3101. obj.unset(buffer,F_OFFSET_1);
  3102. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3103. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3104. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3105. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3106. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3107. obj.unset(buffer,F_OFFSET_1);
  3108. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3109. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3110. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  3111. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3112. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3113. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3114. valBuffer^^ := VAL_1;
  3115. obj.unset(buffer,F_OFFSET_1);
  3116. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3117. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  3118. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  3119. CheckEquals(VAL_1, valBuffer^^);
  3120. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  3121. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  3122. SetBit(startBuffer^,BIT_ORDER_SET,True);//startBuffer^ := 2;
  3123. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3124. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3125. valBuffer^^ := VAL_2;
  3126. obj.unset(buffer,F_OFFSET_1);
  3127. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3128. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  3129. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  3130. CheckEquals(VAL_2, valBuffer^^);
  3131. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  3132. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  3133. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3134. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3135. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3136. valBuffer^^ := VAL_3;
  3137. obj.unset(buffer,F_OFFSET_1);
  3138. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3139. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  3140. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  3141. CheckEquals(VAL_3, valBuffer^^);
  3142. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  3143. end;
  3144. { TSDOBaseDataObject_Test }
  3145. class function TSDOBaseDataObject_Test.Create_Factory() : ISDODataFactory;
  3146. var
  3147. typ, typ2 : ISDOType;
  3148. begin
  3149. Result := TSDODataFactory.Create();
  3150. Result.AddType(s_URI_1,s_TYPE_1,[]);
  3151. Result.AddType(s_URI_1,s_TYPE_2,[]);
  3152. Result.AddType(s_URI_3,s_TYPE_3,[]);
  3153. typ := Result.getType(s_URI_1,s_TYPE_1);
  3154. Result.addProperty(typ,s_PROP_BOOL_1,sdo_namespace,'Boolean',[]);
  3155. Result.addProperty(typ,s_PROP_INTEGER_1,sdo_namespace,'Integer',[]);
  3156. Result.addProperty(typ,s_PROP_STR_1,sdo_namespace,'String',[]);
  3157. Result.addProperty(typ,s_PROP_BOOL_2,sdo_namespace,'Boolean',[]);
  3158. Result.addProperty(typ,s_PROP_INTEGER_2,sdo_namespace,'Integer',[]);
  3159. Result.addProperty(typ,s_PROP_STR_2,sdo_namespace,'String',[]);
  3160. Result.addProperty(typ,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[]);
  3161. Result.addProperty(typ,s_PROP_OBJ_REF,s_URI_1,s_TYPE_2,[]);
  3162. typ2 := Result.getType(s_URI_1,s_TYPE_2);
  3163. Result.addProperty(typ2,s_PROP_BOOL_A,sdo_namespace,'Boolean',[]);
  3164. Result.addProperty(typ2,s_PROP_INTEGER_A,sdo_namespace,'Integer',[]);
  3165. Result.addProperty(typ2,s_PROP_STR_A,sdo_namespace,'String',[]);
  3166. Result.addProperty(typ2,s_PROP_OBJ_CONT,s_URI_3,s_TYPE_3,[]);
  3167. end;
  3168. function TSDOBaseDataObject_Test.Create_Field() : ISDOField;
  3169. begin
  3170. Result := TSDOObjectField.Create() as ISDOField;
  3171. end;
  3172. procedure TSDOBaseDataObject_Test.getDataObject();
  3173. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3174. var
  3175. obj : ISDOField;
  3176. trueBuffer : array[0..200] of Byte;
  3177. buffer, tmpBuffer, startBuffer : PByte;
  3178. valBuffer : PPSDODataObject;
  3179. val_1, val_2, val_3 : ISDODataObject;
  3180. begin
  3181. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3182. buffer := @(trueBuffer[0]);
  3183. tmpBuffer := buffer;
  3184. startBuffer := tmpBuffer;
  3185. Inc(tmpBuffer);
  3186. valBuffer := PPSDODataObject(tmpBuffer);
  3187. obj := Create_Field();
  3188. val_1 := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3189. val_2 := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3190. val_3 := nil;
  3191. Check(nil = obj.getDataObject(buffer,F_OFFSET_0));
  3192. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3193. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3194. try
  3195. valBuffer^^ := val_1;
  3196. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3197. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3198. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3199. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3200. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3201. CheckEquals(PtrInt(VAL_1),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3202. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3203. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3204. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3205. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3206. CheckEquals(PtrInt(VAL_1),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3207. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3208. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3209. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3210. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3211. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3212. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3213. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3214. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3215. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3216. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3217. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3218. valBuffer^^ := val_2;
  3219. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3220. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3221. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3222. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3223. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3224. CheckEquals(PtrInt(val_2),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3225. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3226. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3227. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3228. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3229. CheckEquals(PtrInt(val_2),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3230. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3231. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3232. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3233. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3234. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3235. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3236. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3237. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3238. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3239. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3240. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3241. valBuffer^^ := val_3;
  3242. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3243. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3244. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3245. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3246. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3247. CheckEquals(PtrInt(val_3),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3248. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3249. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3250. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3251. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3252. CheckEquals(PtrInt(val_3),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3253. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3254. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3255. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3256. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3257. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3258. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3259. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3260. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3261. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3262. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3263. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3264. valBuffer^^ := nil;
  3265. finally
  3266. FreeMem(valBuffer^,SizeOf(PSDODataObject));
  3267. valBuffer^ := nil;
  3268. end;
  3269. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3270. startBuffer := tmpBuffer;
  3271. Inc(tmpBuffer);
  3272. valBuffer := PPSDODataObject(tmpBuffer);
  3273. Check(nil = obj.getDataObject(buffer,F_OFFSET_0));
  3274. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3275. try
  3276. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3277. valBuffer^^ := val_1;
  3278. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3279. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3280. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3281. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3282. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3283. CheckEquals(PtrInt(val_1),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3284. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3285. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3286. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3287. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3288. CheckEquals(PtrInt(val_1),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3289. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3290. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3291. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3292. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3293. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3294. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3295. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3296. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3297. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3298. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3299. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3300. valBuffer^^ := val_2;
  3301. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3302. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3303. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3304. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3305. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3306. CheckEquals(PtrInt(val_2),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3307. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3308. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3309. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3310. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3311. CheckEquals(PtrInt(val_2),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3312. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3313. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3314. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3315. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3316. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3317. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3318. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3319. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3320. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3321. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3322. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3323. valBuffer^^ := val_3;
  3324. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3325. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3326. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3327. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3328. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3329. CheckEquals(PtrInt(val_3),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3330. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3331. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3332. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3333. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3334. CheckEquals(PtrInt(val_3),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3335. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3336. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3337. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3338. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3339. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3340. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3341. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3342. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3343. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3344. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3345. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3346. finally
  3347. FreeMem(valBuffer^,SizeOf(PSDODataObject));
  3348. valBuffer^ := nil;
  3349. end;
  3350. end;
  3351. procedure TSDOBaseDataObject_Test.getVariant();
  3352. const
  3353. F_OFFSET = 0;
  3354. var
  3355. obj : ISDOField;
  3356. trueBuffer : array[0..200] of Byte;
  3357. buffer : PByte;
  3358. val_array : array[0..2] of ISDODataObject;
  3359. val_x : ISDODataObject;
  3360. v : Variant;
  3361. a : IInterface;
  3362. ax : ISDODataObject;
  3363. i : TSDOByte;
  3364. begin
  3365. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3366. buffer := @(trueBuffer[0]);
  3367. obj := Create_Field();
  3368. val_array[0] := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3369. val_array[1] := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3370. val_array[2] := nil;
  3371. for i := Low(val_array) to High(val_array) do begin
  3372. val_x := val_array[i];
  3373. obj.setDataObject(buffer,F_OFFSET,val_x);
  3374. v := obj.getVariant(buffer,F_OFFSET);
  3375. if (val_x <> nil) then begin
  3376. Check(VarIsType(v,varUnknown));
  3377. a := v;
  3378. Check(Supports(a,ISDODataObject,ax));
  3379. CheckEquals(PtrUInt(val_x),PtrUInt(ax));
  3380. end else begin
  3381. a := v;
  3382. Check(a = nil);
  3383. end;
  3384. end;
  3385. end;
  3386. procedure TSDOBaseDataObject_Test.setDataObject();
  3387. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3388. var
  3389. obj : ISDOField;
  3390. trueBuffer : array[0..200] of Byte;
  3391. buffer, tmpBuffer, startBuffer : PByte;
  3392. valBuffer : PPSDODataObject;
  3393. val_1, val_2, val_3 : ISDODataObject;
  3394. begin
  3395. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3396. buffer := @(trueBuffer[0]);
  3397. tmpBuffer := buffer;
  3398. startBuffer := tmpBuffer;
  3399. Inc(tmpBuffer);
  3400. valBuffer := PPSDODataObject(tmpBuffer);
  3401. obj := Create_Field();
  3402. val_1 := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3403. val_2 := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3404. val_3 := nil;
  3405. obj.setDataObject(buffer,F_OFFSET_0,nil);
  3406. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3407. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3408. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3409. obj.setDataObject(buffer,F_OFFSET_0,val_1);
  3410. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3411. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3412. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3413. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3414. Check(val_1 = valBuffer^^);
  3415. obj.setDataObject(buffer,F_OFFSET_0,val_2);
  3416. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3417. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3418. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3419. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3420. Check(val_2 = valBuffer^^);
  3421. obj.setDataObject(buffer,F_OFFSET_0,val_3);
  3422. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3423. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3424. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3425. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3426. Check(val_3 = valBuffer^^);
  3427. valBuffer^^ := nil;
  3428. FreeMem(valBuffer^,SizeOf(PSDODataObject));
  3429. valBuffer^ := nil;
  3430. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3431. startBuffer := tmpBuffer;
  3432. Inc(tmpBuffer);
  3433. valBuffer := PPSDODataObject(tmpBuffer);
  3434. obj.setDataObject(buffer,F_OFFSET_1,nil);
  3435. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3436. obj.setDataObject(buffer,F_OFFSET_1,val_1);
  3437. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3438. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3439. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3440. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3441. Check(val_1 = valBuffer^^);
  3442. obj.setDataObject(buffer,F_OFFSET_1,val_2);
  3443. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3444. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3445. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3446. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3447. Check(val_2 = valBuffer^^);
  3448. obj.setDataObject(buffer,F_OFFSET_1,val_3);
  3449. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3450. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3451. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3452. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3453. Check(val_3 = valBuffer^^);
  3454. valBuffer^^ := nil;
  3455. FreeMem(valBuffer^,SizeOf(PSDODataObject));
  3456. valBuffer^ := nil;
  3457. end;
  3458. procedure TSDOBaseDataObject_Test.setNull();
  3459. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3460. var
  3461. obj : ISDOField;
  3462. trueBuffer : array[0..200] of Byte;
  3463. buffer, tmpBuffer, startBuffer : PByte;
  3464. valBuffer : PPSDODataObject;
  3465. val_1, val_2, val_3 : ISDODataObject;
  3466. begin
  3467. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3468. buffer := @(trueBuffer[0]);
  3469. tmpBuffer := buffer;
  3470. startBuffer := tmpBuffer;
  3471. Inc(tmpBuffer);
  3472. valBuffer := PPSDODataObject(tmpBuffer);
  3473. obj := Create_Field();
  3474. val_1 := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3475. val_2 := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3476. val_3 := nil;
  3477. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3478. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3479. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3480. obj.setNull(buffer,F_OFFSET_0);
  3481. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3482. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3483. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3484. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3485. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3486. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3487. obj.setNull(buffer,F_OFFSET_0);
  3488. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3489. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3490. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3491. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3492. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3493. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3494. obj.setNull(buffer,F_OFFSET_0);
  3495. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3496. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3497. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3498. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3499. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3500. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3501. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3502. valBuffer^^ := val_1;
  3503. obj.setNull(buffer,F_OFFSET_0);
  3504. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3505. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3506. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3507. Check(valBuffer^ = nil);
  3508. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3509. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3510. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3511. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3512. valBuffer^^ := val_2;
  3513. obj.setNull(buffer,F_OFFSET_0);
  3514. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3515. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3516. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3517. Check(valBuffer^ = nil);
  3518. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3519. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3520. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3521. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3522. valBuffer^^ := val_3;
  3523. obj.setNull(buffer,F_OFFSET_0);
  3524. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3525. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3526. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3527. Check(valBuffer^ = nil);
  3528. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3529. startBuffer := tmpBuffer;
  3530. Inc(tmpBuffer);
  3531. valBuffer := PPSDODataObject(tmpBuffer);
  3532. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3533. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3534. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3535. obj.setNull(buffer,F_OFFSET_1);
  3536. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3537. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3538. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3539. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3540. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3541. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3542. obj.setNull(buffer,F_OFFSET_1);
  3543. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3544. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3545. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3546. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3547. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3548. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3549. obj.setNull(buffer,F_OFFSET_1);
  3550. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3551. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3552. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3553. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3554. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3555. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3556. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3557. valBuffer^^ := val_1;
  3558. obj.setNull(buffer,F_OFFSET_1);
  3559. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3560. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3561. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3562. Check(valBuffer^ = nil);
  3563. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3564. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3565. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3566. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3567. valBuffer^^ := val_2;
  3568. obj.setNull(buffer,F_OFFSET_1);
  3569. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3570. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3571. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3572. Check(valBuffer^ = nil);
  3573. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3574. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3575. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3576. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3577. valBuffer^^ := val_3;
  3578. obj.setNull(buffer,F_OFFSET_1);
  3579. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3580. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3581. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3582. Check(valBuffer^ = nil);
  3583. end;
  3584. procedure TSDOBaseDataObject_Test.SetUp();
  3585. begin
  3586. inherited;
  3587. FFactory := Create_Factory();
  3588. end;
  3589. procedure TSDOBaseDataObject_Test.setVariant();
  3590. const
  3591. F_OFFSET = 0;
  3592. var
  3593. obj : ISDOField;
  3594. trueBuffer : array[0..200] of Byte;
  3595. buffer : PByte;
  3596. val_array : array[0..2] of ISDODataObject;
  3597. val_x : ISDODataObject;
  3598. v : Variant;
  3599. a : IInterface;
  3600. ax : ISDODataObject;
  3601. i : TSDOByte;
  3602. begin
  3603. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3604. buffer := @(trueBuffer[0]);
  3605. obj := Create_Field();
  3606. val_array[0] := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3607. val_array[1] := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3608. val_array[2] := nil;
  3609. for i := Low(val_array) to High(val_array) do begin
  3610. val_x := val_array[i];
  3611. obj.setVariant(buffer,F_OFFSET,val_x);
  3612. ax := obj.getDataObject(buffer,F_OFFSET);
  3613. CheckEquals(PtrUInt(val_x),PtrUInt(ax));
  3614. end;
  3615. end;
  3616. procedure TSDOBaseDataObject_Test.TearDown;
  3617. begin
  3618. FFactory := nil;
  3619. inherited;
  3620. end;
  3621. procedure TSDOBaseDataObject_Test.unset();
  3622. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3623. var
  3624. obj : ISDOField;
  3625. trueBuffer : array[0..200] of Byte;
  3626. buffer, tmpBuffer, startBuffer : PByte;
  3627. valBuffer : PPSDODataObject;
  3628. val_1, val_2, val_3 : ISDODataObject;
  3629. begin
  3630. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3631. buffer := @(trueBuffer[0]);
  3632. tmpBuffer := buffer;
  3633. startBuffer := tmpBuffer;
  3634. Inc(tmpBuffer);
  3635. valBuffer := PPSDODataObject(tmpBuffer);
  3636. obj := Create_Field();
  3637. val_1 := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3638. val_2 := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3639. val_3 := nil;
  3640. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3641. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3642. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3643. obj.unset(buffer,F_OFFSET_0);
  3644. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3645. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3646. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3647. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3648. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3649. obj.unset(buffer,F_OFFSET_0);
  3650. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3651. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3652. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3653. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3654. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3655. obj.unset(buffer,F_OFFSET_0);
  3656. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3657. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3658. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3659. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3660. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3661. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3662. valBuffer^^ := val_1;
  3663. obj.unset(buffer,F_OFFSET_0);
  3664. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3665. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3666. Check(valBuffer^ = nil);
  3667. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3668. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3669. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3670. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3671. valBuffer^^ := val_2;
  3672. obj.unset(buffer,F_OFFSET_0);
  3673. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3674. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3675. Check(valBuffer^ = nil);
  3676. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3677. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3678. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3679. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3680. valBuffer^^ := val_3;
  3681. obj.unset(buffer,F_OFFSET_0);
  3682. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3683. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3684. Check(valBuffer^ = nil);
  3685. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3686. startBuffer := tmpBuffer;
  3687. Inc(tmpBuffer);
  3688. valBuffer := PPSDODataObject(tmpBuffer);
  3689. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3690. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3691. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3692. obj.unset(buffer,F_OFFSET_1);
  3693. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3694. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3695. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3696. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3697. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3698. obj.unset(buffer,F_OFFSET_1);
  3699. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3700. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3701. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3702. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3703. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3704. obj.unset(buffer,F_OFFSET_1);
  3705. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3706. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3707. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3708. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3709. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3710. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3711. valBuffer^^ := val_1;
  3712. obj.unset(buffer,F_OFFSET_1);
  3713. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3714. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3715. Check(valBuffer^ = nil);
  3716. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3717. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3718. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3719. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3720. valBuffer^^ := val_2;
  3721. obj.unset(buffer,F_OFFSET_1);
  3722. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3723. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3724. Check(valBuffer^ = nil);
  3725. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3726. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3727. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3728. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3729. valBuffer^^ := val_3;
  3730. obj.unset(buffer,F_OFFSET_1);
  3731. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3732. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3733. Check(valBuffer^ = nil);
  3734. end;
  3735. { TSDOChangeSummaryField_Test }
  3736. class function TSDOChangeSummaryField_Test.Create_Factory: ISDODataFactory;
  3737. var
  3738. typ, typ2 : ISDOType;
  3739. begin
  3740. Result := TSDODataFactory.Create();
  3741. Result.AddType(s_URI_1,s_TYPE_1,[]);
  3742. Result.AddType(s_URI_1,s_TYPE_2,[]);
  3743. Result.AddType(s_URI_3,s_TYPE_3,[]);
  3744. typ := Result.getType(s_URI_1,s_TYPE_1);
  3745. Result.addProperty(typ,s_PROP_BOOL_1,sdo_namespace,'Boolean',[]);
  3746. Result.addProperty(typ,s_PROP_INTEGER_1,sdo_namespace,'Integer',[]);
  3747. Result.addProperty(typ,s_PROP_STR_1,sdo_namespace,'String',[]);
  3748. Result.addProperty(typ,s_PROP_CHANGE_SUMMARY,sdo_namespace,'ChangeSummary',[pfIsReadOnly]);
  3749. Result.addProperty(typ,s_PROP_BOOL_2,sdo_namespace,'Boolean',[]);
  3750. Result.addProperty(typ,s_PROP_INTEGER_2,sdo_namespace,'Integer',[]);
  3751. Result.addProperty(typ,s_PROP_STR_2,sdo_namespace,'String',[]);
  3752. Result.addProperty(typ,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[]);
  3753. Result.addProperty(typ,s_PROP_OBJ_REF,s_URI_1,s_TYPE_2,[]);
  3754. typ2 := Result.getType(s_URI_1,s_TYPE_2);
  3755. Result.addProperty(typ2,s_PROP_BOOL_A,sdo_namespace,'Boolean',[]);
  3756. Result.addProperty(typ2,s_PROP_INTEGER_A,sdo_namespace,'Integer',[]);
  3757. Result.addProperty(typ2,s_PROP_STR_A,sdo_namespace,'String',[]);
  3758. Result.addProperty(typ2,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_1,[]);
  3759. end;
  3760. function TSDOChangeSummaryField_Test.Create_Field() : ISDOField;
  3761. begin
  3762. Result := TSDOChangeSummaryField.Create();
  3763. end;
  3764. procedure TSDOChangeSummaryField_Test.getChangeSummary();
  3765. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3766. var
  3767. obj : ISDOField;
  3768. trueBuffer : array[0..200] of Byte;
  3769. buffer, tmpBuffer, startBuffer : PByte;
  3770. valBuffer : PPSDOChangeSummary;
  3771. val_1, val_2, val_3 : ISDOChangeSummary;
  3772. begin
  3773. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3774. buffer := @(trueBuffer[0]);
  3775. tmpBuffer := buffer;
  3776. startBuffer := tmpBuffer;
  3777. Inc(tmpBuffer);
  3778. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3779. obj := Create_Field();
  3780. val_1 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create());;
  3781. val_2 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create());;
  3782. val_3 := nil;
  3783. Check(nil = obj.getChangeSummary(buffer,F_OFFSET_0));
  3784. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3785. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3786. try
  3787. valBuffer^^ := val_1;
  3788. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3789. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3790. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3791. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3792. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3793. CheckEquals(PtrInt(VAL_1),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3794. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3795. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3796. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3797. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3798. CheckEquals(PtrInt(VAL_1),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3799. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3800. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3801. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3802. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3803. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3804. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3805. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3806. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3807. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3808. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3809. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3810. valBuffer^^ := val_2;
  3811. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3812. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3813. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3814. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3815. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3816. CheckEquals(PtrInt(val_2),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3817. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3818. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3819. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3820. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3821. CheckEquals(PtrInt(val_2),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3822. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3823. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3824. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3825. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3826. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3827. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3828. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3829. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3830. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3831. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3832. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3833. valBuffer^^ := val_3;
  3834. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3835. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3836. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3837. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3838. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3839. CheckEquals(PtrInt(val_3),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3840. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3841. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3842. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3843. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3844. CheckEquals(PtrInt(val_3),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3845. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3846. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3847. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3848. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3849. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3850. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3851. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3852. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3853. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3854. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3855. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3856. valBuffer^^ := nil;
  3857. finally
  3858. FreeMem(valBuffer^,SizeOf(PSDOChangeSummary));
  3859. valBuffer^ := nil;
  3860. end;
  3861. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3862. startBuffer := tmpBuffer;
  3863. Inc(tmpBuffer);
  3864. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3865. Check(nil = obj.getChangeSummary(buffer,F_OFFSET_0));
  3866. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3867. try
  3868. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3869. valBuffer^^ := val_1;
  3870. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3871. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3872. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3873. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3874. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3875. CheckEquals(PtrInt(val_1),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3876. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3877. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3878. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3879. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3880. CheckEquals(PtrInt(val_1),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3881. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3882. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3883. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3884. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3885. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3886. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3887. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3888. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3889. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3890. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3891. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3892. valBuffer^^ := val_2;
  3893. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3894. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3895. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3896. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3897. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3898. CheckEquals(PtrInt(val_2),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3899. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3900. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3901. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3902. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3903. CheckEquals(PtrInt(val_2),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3904. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3905. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3906. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3907. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3908. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3909. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3910. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3911. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3912. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3913. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3914. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3915. valBuffer^^ := val_3;
  3916. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3917. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3918. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3919. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3920. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3921. CheckEquals(PtrInt(val_3),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3922. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3923. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3924. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3925. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3926. CheckEquals(PtrInt(val_3),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3927. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3928. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3929. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3930. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3931. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3932. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3933. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3934. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3935. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3936. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3937. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3938. finally
  3939. valBuffer^^ := nil;
  3940. FreeMem(valBuffer^,SizeOf(PSDOChangeSummary));
  3941. valBuffer^ := nil;
  3942. end;
  3943. end;
  3944. procedure TSDOChangeSummaryField_Test.setChangeSummary();
  3945. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3946. var
  3947. obj : ISDOField;
  3948. trueBuffer : array[0..200] of Byte;
  3949. buffer, tmpBuffer, startBuffer : PByte;
  3950. valBuffer : PPSDOChangeSummary;
  3951. val_1, val_2, val_3 : ISDOChangeSummary;
  3952. begin
  3953. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3954. buffer := @(trueBuffer[0]);
  3955. tmpBuffer := buffer;
  3956. startBuffer := tmpBuffer;
  3957. Inc(tmpBuffer);
  3958. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3959. obj := Create_Field();
  3960. val_1 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  3961. val_2 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  3962. val_3 := nil;
  3963. obj.setChangeSummary(buffer,F_OFFSET_0,nil);
  3964. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3965. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3966. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3967. obj.setChangeSummary(buffer,F_OFFSET_0,val_1);
  3968. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3969. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3970. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3971. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3972. Check(val_1 = valBuffer^^);
  3973. obj.setChangeSummary(buffer,F_OFFSET_0,val_2);
  3974. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3975. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3976. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3977. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3978. Check(val_2 = valBuffer^^);
  3979. obj.setChangeSummary(buffer,F_OFFSET_0,val_3);
  3980. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3981. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3982. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3983. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3984. Check(val_3 = valBuffer^^);
  3985. valBuffer^^ := nil;
  3986. FreeMem(valBuffer^,SizeOf(PSDOChangeSummary));
  3987. valBuffer^ := nil;
  3988. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3989. startBuffer := tmpBuffer;
  3990. Inc(tmpBuffer);
  3991. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3992. obj.setChangeSummary(buffer,F_OFFSET_1,nil);
  3993. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3994. obj.setChangeSummary(buffer,F_OFFSET_1,val_1);
  3995. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3996. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3997. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3998. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3999. Check(val_1 = valBuffer^^);
  4000. obj.setChangeSummary(buffer,F_OFFSET_1,val_2);
  4001. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  4002. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  4003. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  4004. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  4005. Check(val_2 = valBuffer^^);
  4006. obj.setChangeSummary(buffer,F_OFFSET_1,val_3);
  4007. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  4008. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  4009. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  4010. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  4011. Check(val_3 = valBuffer^^);
  4012. valBuffer^^ := nil;
  4013. FreeMem(valBuffer^,SizeOf(PSDOChangeSummary));
  4014. valBuffer^ := nil;
  4015. end;
  4016. procedure TSDOChangeSummaryField_Test.setNull();
  4017. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4018. var
  4019. obj : ISDOField;
  4020. trueBuffer : array[0..200] of Byte;
  4021. buffer, tmpBuffer, startBuffer : PByte;
  4022. valBuffer : PPSDOChangeSummary;
  4023. val_1, val_2, val_3 : ISDOChangeSummary;
  4024. begin
  4025. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  4026. buffer := @(trueBuffer[0]);
  4027. tmpBuffer := buffer;
  4028. startBuffer := tmpBuffer;
  4029. Inc(tmpBuffer);
  4030. valBuffer := PPSDOChangeSummary(tmpBuffer);
  4031. obj := Create_Field();
  4032. val_1 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  4033. val_2 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  4034. val_3 := nil;
  4035. SetBit(startBuffer^,BIT_ORDER_SET,False);
  4036. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4037. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4038. obj.setNull(buffer,F_OFFSET_0);
  4039. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4040. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4041. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4042. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4043. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4044. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4045. obj.setNull(buffer,F_OFFSET_0);
  4046. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4047. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4048. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4049. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4050. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  4051. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4052. obj.setNull(buffer,F_OFFSET_0);
  4053. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4054. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4055. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4056. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4057. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4058. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4059. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4060. valBuffer^^ := val_1;
  4061. obj.setNull(buffer,F_OFFSET_0);
  4062. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4063. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4064. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4065. Check(valBuffer^ = nil);
  4066. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4067. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4068. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4069. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4070. valBuffer^^ := val_2;
  4071. obj.setNull(buffer,F_OFFSET_0);
  4072. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4073. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4074. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4075. Check(valBuffer^ = nil);
  4076. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4077. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4078. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4079. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4080. valBuffer^^ := val_3;
  4081. obj.setNull(buffer,F_OFFSET_0);
  4082. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4083. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4084. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4085. Check(valBuffer^ = nil);
  4086. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  4087. startBuffer := tmpBuffer;
  4088. Inc(tmpBuffer);
  4089. valBuffer := PPSDOChangeSummary(tmpBuffer);
  4090. SetBit(startBuffer^,BIT_ORDER_SET,False);
  4091. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4092. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4093. obj.setNull(buffer,F_OFFSET_1);
  4094. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4095. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4096. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4097. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4098. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4099. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4100. obj.setNull(buffer,F_OFFSET_1);
  4101. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4102. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4103. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4104. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4105. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  4106. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4107. obj.setNull(buffer,F_OFFSET_1);
  4108. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4109. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4110. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4111. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4112. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4113. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4114. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4115. valBuffer^^ := val_1;
  4116. obj.setNull(buffer,F_OFFSET_1);
  4117. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4118. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4119. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4120. Check(valBuffer^ = nil);
  4121. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4122. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4123. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4124. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4125. valBuffer^^ := val_2;
  4126. obj.setNull(buffer,F_OFFSET_1);
  4127. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4128. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4129. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4130. Check(valBuffer^ = nil);
  4131. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4132. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4133. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4134. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4135. valBuffer^^ := val_3;
  4136. obj.setNull(buffer,F_OFFSET_1);
  4137. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  4138. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  4139. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4140. Check(valBuffer^ = nil);
  4141. end;
  4142. procedure TSDOChangeSummaryField_Test.SetUp;
  4143. begin
  4144. inherited;
  4145. FFactory := Create_Factory();
  4146. end;
  4147. procedure TSDOChangeSummaryField_Test.TearDown;
  4148. begin
  4149. FFactory := nil;
  4150. inherited;
  4151. end;
  4152. procedure TSDOChangeSummaryField_Test.unset();
  4153. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4154. var
  4155. obj : ISDOField;
  4156. trueBuffer : array[0..200] of Byte;
  4157. buffer, tmpBuffer, startBuffer : PByte;
  4158. valBuffer : PPSDOChangeSummary;
  4159. val_1, val_2, val_3 : ISDOChangeSummary;
  4160. begin
  4161. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  4162. buffer := @(trueBuffer[0]);
  4163. tmpBuffer := buffer;
  4164. startBuffer := tmpBuffer;
  4165. Inc(tmpBuffer);
  4166. valBuffer := PPSDOChangeSummary(tmpBuffer);
  4167. obj := Create_Field();
  4168. val_1 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  4169. val_2 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  4170. val_3 := nil;
  4171. SetBit(startBuffer^,BIT_ORDER_SET,False);
  4172. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4173. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4174. obj.unset(buffer,F_OFFSET_0);
  4175. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4176. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4177. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4178. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4179. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4180. obj.unset(buffer,F_OFFSET_0);
  4181. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4182. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4183. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4184. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  4185. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4186. obj.unset(buffer,F_OFFSET_0);
  4187. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4188. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4189. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4190. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4191. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4192. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4193. valBuffer^^ := val_1;
  4194. obj.unset(buffer,F_OFFSET_0);
  4195. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4196. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4197. Check(valBuffer^ = nil);
  4198. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4199. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4200. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4201. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4202. valBuffer^^ := val_2;
  4203. obj.unset(buffer,F_OFFSET_0);
  4204. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4205. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4206. Check(valBuffer^ = nil);
  4207. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4208. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4209. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4210. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4211. valBuffer^^ := val_3;
  4212. obj.unset(buffer,F_OFFSET_0);
  4213. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4214. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4215. Check(valBuffer^ = nil);
  4216. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  4217. startBuffer := tmpBuffer;
  4218. Inc(tmpBuffer);
  4219. valBuffer := PPSDOChangeSummary(tmpBuffer);
  4220. SetBit(startBuffer^,BIT_ORDER_SET,False);
  4221. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4222. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4223. obj.unset(buffer,F_OFFSET_1);
  4224. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4225. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4226. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4227. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4228. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4229. obj.unset(buffer,F_OFFSET_1);
  4230. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4231. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4232. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4233. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  4234. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4235. obj.unset(buffer,F_OFFSET_1);
  4236. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4237. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4238. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4239. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4240. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4241. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4242. valBuffer^^ := val_1;
  4243. obj.unset(buffer,F_OFFSET_1);
  4244. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4245. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4246. Check(valBuffer^ = nil);
  4247. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4248. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4249. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4250. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4251. valBuffer^^ := val_2;
  4252. obj.unset(buffer,F_OFFSET_1);
  4253. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4254. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4255. Check(valBuffer^ = nil);
  4256. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4257. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4258. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4259. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4260. valBuffer^^ := val_3;
  4261. obj.unset(buffer,F_OFFSET_1);
  4262. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4263. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4264. Check(valBuffer^ = nil);
  4265. end;
  4266. { TSDOByteField_Test }
  4267. function TSDOByteField_Test.Create_Field() : ISDOField;
  4268. begin
  4269. Result := TSDOByteField.Create();
  4270. end;
  4271. procedure TSDOByteField_Test.getBoolean();
  4272. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4273. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4274. var
  4275. obj : ISDOField;
  4276. intVal : QWord;
  4277. buffer, tmpBuffer, attributeBuffer : PByte;
  4278. valBuffer : PByte;
  4279. begin
  4280. intVal := 0;
  4281. buffer := @intVal;
  4282. tmpBuffer := buffer;
  4283. attributeBuffer := buffer;
  4284. Inc(tmpBuffer);
  4285. valBuffer := PByte(tmpBuffer);
  4286. obj := Create_Field();
  4287. valBuffer^ := VAL_1;
  4288. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4289. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4290. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  4291. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4292. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4293. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  4294. valBuffer^ := VAL_2;
  4295. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4296. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4297. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  4298. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4299. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4300. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  4301. valBuffer^ := VAL_3;
  4302. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4303. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4304. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  4305. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4306. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4307. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  4308. intVal := 0;
  4309. Inc(tmpBuffer);
  4310. Inc(attributeBuffer);
  4311. valBuffer := PByte(tmpBuffer);
  4312. valBuffer^ := VAL_1;
  4313. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4314. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4315. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  4316. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4317. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4318. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  4319. valBuffer^ := VAL_2;
  4320. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4321. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4322. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  4323. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4324. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4325. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  4326. valBuffer^ := VAL_3;
  4327. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4328. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4329. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  4330. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4331. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4332. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  4333. end;
  4334. procedure TSDOByteField_Test.getByte;
  4335. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4336. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4337. var
  4338. obj : ISDOField;
  4339. intVal : QWord;
  4340. buffer, tmpBuffer, attributeBuffer : PByte;
  4341. valBuffer : PByte;
  4342. begin
  4343. intVal := 0;
  4344. buffer := @intVal;
  4345. tmpBuffer := buffer;
  4346. attributeBuffer := buffer;
  4347. Inc(tmpBuffer);
  4348. valBuffer := PByte(tmpBuffer);
  4349. obj := Create_Field();
  4350. valBuffer^ := VAL_1;
  4351. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4352. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4353. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4354. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4355. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  4356. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4357. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4358. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4359. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4360. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  4361. valBuffer^ := VAL_2;
  4362. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4363. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4364. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4365. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4366. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  4367. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4368. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4369. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4370. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4371. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  4372. valBuffer^ := VAL_3;
  4373. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4374. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4375. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4376. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4377. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  4378. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4379. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4380. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4381. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4382. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  4383. intVal := 0;
  4384. Inc(tmpBuffer);
  4385. Inc(attributeBuffer);
  4386. valBuffer := PByte(tmpBuffer);
  4387. valBuffer^ := VAL_1;
  4388. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4389. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4390. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4391. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4392. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  4393. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4394. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4395. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4396. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4397. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  4398. valBuffer^ := VAL_2;
  4399. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4400. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4401. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4402. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4403. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  4404. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4405. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4406. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4407. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4408. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  4409. valBuffer^ := VAL_3;
  4410. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4411. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4412. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4413. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4414. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  4415. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4416. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4417. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4418. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4419. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  4420. end;
  4421. procedure TSDOByteField_Test.getCharacter();
  4422. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4423. VAL_1 = Ord(TSDOChar(125)); VAL_2 = Ord(TSDOChar(45)); VAL_3 = 0;
  4424. var
  4425. obj : ISDOField;
  4426. intVal : QWord;
  4427. buffer, tmpBuffer, attributeBuffer : PByte;
  4428. valBuffer : PByte;
  4429. begin
  4430. intVal := 0;
  4431. buffer := @intVal;
  4432. tmpBuffer := buffer;
  4433. attributeBuffer := buffer;
  4434. Inc(tmpBuffer);
  4435. valBuffer := PByte(tmpBuffer);
  4436. obj := Create_Field();
  4437. valBuffer^ := VAL_1;
  4438. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4439. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4440. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  4441. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4442. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4443. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  4444. valBuffer^ := VAL_2;
  4445. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4446. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4447. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  4448. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4449. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4450. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  4451. valBuffer^ := VAL_3;
  4452. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4453. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4454. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  4455. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4456. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4457. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  4458. intVal := 0;
  4459. Inc(tmpBuffer);
  4460. Inc(attributeBuffer);
  4461. valBuffer := PByte(tmpBuffer);
  4462. valBuffer^ := VAL_1;
  4463. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4464. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4465. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  4466. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4467. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4468. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  4469. valBuffer^ := VAL_2;
  4470. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4471. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4472. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  4473. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4474. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4475. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  4476. valBuffer^ := VAL_3;
  4477. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4478. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4479. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  4480. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4481. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4482. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  4483. end;
  4484. procedure TSDOByteField_Test.getInteger();
  4485. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4486. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4487. var
  4488. obj : ISDOField;
  4489. intVal : QWord;
  4490. buffer, tmpBuffer, attributeBuffer : PByte;
  4491. valBuffer : PByte;
  4492. begin
  4493. intVal := 0;
  4494. buffer := @intVal;
  4495. tmpBuffer := buffer;
  4496. attributeBuffer := buffer;
  4497. Inc(tmpBuffer);
  4498. valBuffer := PByte(tmpBuffer);
  4499. obj := Create_Field();
  4500. valBuffer^ := VAL_1;
  4501. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4502. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4503. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4504. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4505. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  4506. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4507. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4508. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4509. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4510. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  4511. valBuffer^ := VAL_2;
  4512. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4513. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4514. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4515. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4516. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  4517. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4518. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4519. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4520. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4521. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  4522. valBuffer^ := VAL_3;
  4523. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4524. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4525. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4526. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4527. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  4528. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4529. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4530. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4531. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4532. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  4533. intVal := 0;
  4534. Inc(tmpBuffer);
  4535. Inc(attributeBuffer);
  4536. valBuffer := PByte(tmpBuffer);
  4537. valBuffer^ := VAL_1;
  4538. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4539. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4540. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4541. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4542. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  4543. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4544. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4545. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4546. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4547. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  4548. valBuffer^ := VAL_2;
  4549. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4550. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4551. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4552. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4553. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  4554. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4555. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4556. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4557. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4558. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  4559. valBuffer^ := VAL_3;
  4560. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4561. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4562. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4563. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4564. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  4565. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4566. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4567. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4568. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4569. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  4570. end;
  4571. procedure TSDOByteField_Test.getLong();
  4572. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4573. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4574. var
  4575. obj : ISDOField;
  4576. intVal : QWord;
  4577. buffer, tmpBuffer, attributeBuffer : PByte;
  4578. valBuffer : PByte;
  4579. begin
  4580. intVal := 0;
  4581. buffer := @intVal;
  4582. tmpBuffer := buffer;
  4583. attributeBuffer := buffer;
  4584. Inc(tmpBuffer);
  4585. valBuffer := PByte(tmpBuffer);
  4586. obj := Create_Field();
  4587. valBuffer^ := VAL_1;
  4588. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4589. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4590. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4591. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4592. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  4593. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4594. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4595. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4596. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4597. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  4598. valBuffer^ := VAL_2;
  4599. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4600. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4601. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4602. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4603. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  4604. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4605. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4606. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4607. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4608. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  4609. valBuffer^ := VAL_3;
  4610. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4611. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4612. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4613. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4614. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  4615. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4616. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4617. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4618. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4619. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  4620. intVal := 0;
  4621. Inc(tmpBuffer);
  4622. Inc(attributeBuffer);
  4623. valBuffer := PByte(tmpBuffer);
  4624. valBuffer^ := VAL_1;
  4625. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4626. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4627. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4628. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4629. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  4630. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4631. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4632. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4633. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4634. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  4635. valBuffer^ := VAL_2;
  4636. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4637. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4638. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4639. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4640. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  4641. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4642. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4643. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4644. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4645. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  4646. valBuffer^ := VAL_3;
  4647. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4648. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4649. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4650. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4651. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  4652. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4653. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4654. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4655. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4656. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  4657. end;
  4658. procedure TSDOByteField_Test.getShort();
  4659. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4660. VAL_1 = 123; VAL_2 = 55; VAL_3 = 0;
  4661. var
  4662. obj : ISDOField;
  4663. intVal : QWord;
  4664. buffer, tmpBuffer, attributeBuffer : PByte;
  4665. valBuffer : PByte;
  4666. begin
  4667. intVal := 0;
  4668. buffer := @intVal;
  4669. tmpBuffer := buffer;
  4670. attributeBuffer := buffer;
  4671. Inc(tmpBuffer);
  4672. valBuffer := PByte(tmpBuffer);
  4673. obj := Create_Field();
  4674. valBuffer^ := VAL_1;
  4675. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4676. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4677. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4678. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4679. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  4680. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4681. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4682. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4683. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4684. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  4685. valBuffer^ := VAL_2;
  4686. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4687. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4688. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4689. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4690. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  4691. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4692. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4693. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4694. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4695. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  4696. valBuffer^ := VAL_3;
  4697. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4698. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4699. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4700. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4701. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  4702. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4703. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4704. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4705. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4706. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  4707. intVal := 0;
  4708. Inc(tmpBuffer);
  4709. Inc(attributeBuffer);
  4710. valBuffer := PByte(tmpBuffer);
  4711. valBuffer^ := VAL_1;
  4712. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4713. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4714. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4715. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4716. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  4717. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4718. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4719. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4720. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4721. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  4722. valBuffer^ := VAL_2;
  4723. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4724. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4725. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4726. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4727. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  4728. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4729. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4730. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4731. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4732. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  4733. valBuffer^ := VAL_3;
  4734. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4735. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4736. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4737. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4738. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  4739. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4740. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4741. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4742. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4743. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  4744. end;
  4745. procedure TSDOByteField_Test.getString();
  4746. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4747. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4748. var
  4749. obj : ISDOField;
  4750. intVal : QWord;
  4751. buffer, tmpBuffer, attributeBuffer : PByte;
  4752. valBuffer : PByte;
  4753. begin
  4754. intVal := 0;
  4755. buffer := @intVal;
  4756. tmpBuffer := buffer;
  4757. attributeBuffer := buffer;
  4758. Inc(tmpBuffer);
  4759. valBuffer := PByte(tmpBuffer);
  4760. obj := Create_Field();
  4761. valBuffer^ := VAL_1;
  4762. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4763. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4764. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  4765. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4766. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4767. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  4768. valBuffer^ := VAL_2;
  4769. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4770. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4771. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  4772. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4773. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4774. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  4775. valBuffer^ := VAL_3;
  4776. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4777. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4778. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  4779. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4780. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4781. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  4782. intVal := 0;
  4783. Inc(tmpBuffer);
  4784. Inc(attributeBuffer);
  4785. valBuffer := PByte(tmpBuffer);
  4786. valBuffer^ := VAL_1;
  4787. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4788. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4789. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  4790. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4791. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4792. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  4793. valBuffer^ := VAL_2;
  4794. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4795. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4796. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  4797. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4798. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4799. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  4800. valBuffer^ := VAL_3;
  4801. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4802. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4803. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  4804. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4805. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4806. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  4807. end;
  4808. procedure TSDOByteField_Test.getVariant();
  4809. const
  4810. F_OFFSET = 0;
  4811. var
  4812. obj : ISDOField;
  4813. intVal : QWord;
  4814. buffer : PByte;
  4815. v : Variant;
  4816. i : TSDOByte;
  4817. begin
  4818. intVal := 0;
  4819. buffer := @intVal;
  4820. obj := Create_Field();
  4821. for i := Low(TSDOByte) to High(TSDOByte) do begin
  4822. obj.setByte(buffer,F_OFFSET,i);
  4823. v := obj.getVariant(buffer,F_OFFSET);
  4824. CheckEquals(i,TSDOByte(v));
  4825. end;
  4826. end;
  4827. procedure TSDOByteField_Test.setBoolean();
  4828. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4829. var
  4830. obj : ISDOField;
  4831. intVal : QWord;
  4832. buffer, tmpBuffer, attributeBuffer : PByte;
  4833. valBuffer : PByte;
  4834. begin
  4835. intVal := 0;
  4836. buffer := @intVal;
  4837. tmpBuffer := buffer;
  4838. attributeBuffer := buffer;
  4839. Inc(tmpBuffer);
  4840. valBuffer := PByte(tmpBuffer);
  4841. obj := Create_Field();
  4842. obj.setBoolean(buffer,F_OFFSET_0,True);
  4843. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4844. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4845. CheckEquals(1,valBuffer^);
  4846. obj.setBoolean(buffer,F_OFFSET_0,False);
  4847. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4848. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4849. CheckEquals(0,valBuffer^);
  4850. intVal := 0;
  4851. Inc(tmpBuffer);
  4852. Inc(attributeBuffer);
  4853. valBuffer := PByte(tmpBuffer);
  4854. obj.setBoolean(buffer,F_OFFSET_1,True);
  4855. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4856. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4857. CheckEquals(1,valBuffer^);
  4858. obj.setBoolean(buffer,F_OFFSET_1,False);
  4859. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4860. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4861. CheckEquals(0,valBuffer^);
  4862. end;
  4863. procedure TSDOByteField_Test.setByte();
  4864. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4865. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4866. var
  4867. obj : ISDOField;
  4868. intVal : QWord;
  4869. buffer, tmpBuffer, attributeBuffer : PByte;
  4870. valBuffer : PByte;
  4871. begin
  4872. intVal := 0;
  4873. buffer := @intVal;
  4874. tmpBuffer := buffer;
  4875. attributeBuffer := buffer;
  4876. Inc(tmpBuffer);
  4877. valBuffer := PByte(tmpBuffer);
  4878. obj := Create_Field();
  4879. obj.setByte(buffer,F_OFFSET_0,VAL_1);
  4880. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4881. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4882. CheckEquals(VAL_1,valBuffer^);
  4883. obj.setByte(buffer,F_OFFSET_0,VAL_2);
  4884. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4885. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4886. CheckEquals(VAL_2,valBuffer^);
  4887. obj.setByte(buffer,F_OFFSET_0,VAL_3);
  4888. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4889. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4890. CheckEquals(VAL_3,valBuffer^);
  4891. intVal := 0;
  4892. Inc(tmpBuffer);
  4893. Inc(attributeBuffer);
  4894. valBuffer := PByte(tmpBuffer);
  4895. obj.setByte(buffer,F_OFFSET_1,VAL_1);
  4896. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4897. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4898. CheckEquals(VAL_1,valBuffer^);
  4899. obj.setByte(buffer,F_OFFSET_1,VAL_2);
  4900. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4901. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4902. CheckEquals(VAL_2,valBuffer^);
  4903. obj.setByte(buffer,F_OFFSET_1,VAL_3);
  4904. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4905. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4906. CheckEquals(VAL_3,valBuffer^);
  4907. end;
  4908. procedure TSDOByteField_Test.setCharacter();
  4909. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4910. VAL_1 = Ord(TSDOChar(125)); VAL_2 = Ord(TSDOChar(45)); VAL_3 = 0;
  4911. var
  4912. obj : ISDOField;
  4913. intVal : QWord;
  4914. buffer, tmpBuffer, attributeBuffer : PByte;
  4915. valBuffer : PByte;
  4916. begin
  4917. intVal := 0;
  4918. buffer := @intVal;
  4919. tmpBuffer := buffer;
  4920. attributeBuffer := buffer;
  4921. Inc(tmpBuffer);
  4922. valBuffer := PByte(tmpBuffer);
  4923. obj := Create_Field();
  4924. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_1));
  4925. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4926. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4927. CheckEquals(VAL_1,valBuffer^);
  4928. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_2));
  4929. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4930. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4931. CheckEquals(VAL_2,valBuffer^);
  4932. intVal := 0;
  4933. Inc(tmpBuffer);
  4934. Inc(attributeBuffer);
  4935. valBuffer := PByte(tmpBuffer);
  4936. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_1));
  4937. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4938. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4939. CheckEquals(VAL_1,valBuffer^);
  4940. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_2));
  4941. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4942. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4943. CheckEquals(VAL_2,valBuffer^);
  4944. end;
  4945. procedure TSDOByteField_Test.setInteger();
  4946. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4947. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4948. var
  4949. obj : ISDOField;
  4950. intVal : QWord;
  4951. buffer, tmpBuffer, attributeBuffer : PByte;
  4952. valBuffer : PByte;
  4953. begin
  4954. intVal := 0;
  4955. buffer := @intVal;
  4956. tmpBuffer := buffer;
  4957. attributeBuffer := buffer;
  4958. Inc(tmpBuffer);
  4959. valBuffer := PByte(tmpBuffer);
  4960. obj := Create_Field();
  4961. obj.setInteger(buffer,F_OFFSET_0,VAL_1);
  4962. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4963. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4964. CheckEquals(VAL_1,valBuffer^);
  4965. obj.setInteger(buffer,F_OFFSET_0,VAL_2);
  4966. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4967. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4968. CheckEquals(VAL_2,valBuffer^);
  4969. obj.setInteger(buffer,F_OFFSET_0,VAL_3);
  4970. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4971. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4972. CheckEquals(VAL_3,valBuffer^);
  4973. intVal := 0;
  4974. Inc(tmpBuffer);
  4975. Inc(attributeBuffer);
  4976. valBuffer := PByte(tmpBuffer);
  4977. obj.setInteger(buffer,F_OFFSET_1,VAL_1);
  4978. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4979. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4980. CheckEquals(VAL_1,valBuffer^);
  4981. obj.setInteger(buffer,F_OFFSET_1,VAL_2);
  4982. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4983. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4984. CheckEquals(VAL_2,valBuffer^);
  4985. obj.setInteger(buffer,F_OFFSET_1,VAL_3);
  4986. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4987. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4988. CheckEquals(VAL_3,valBuffer^);
  4989. end;
  4990. procedure TSDOByteField_Test.setLong();
  4991. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4992. VAL_1 = 123; VAL_2 = 35; VAL_3 = 0;
  4993. var
  4994. obj : ISDOField;
  4995. intVal : QWord;
  4996. buffer, tmpBuffer, attributeBuffer : PByte;
  4997. valBuffer : PByte;
  4998. begin
  4999. intVal := 0;
  5000. buffer := @intVal;
  5001. tmpBuffer := buffer;
  5002. attributeBuffer := buffer;
  5003. Inc(tmpBuffer);
  5004. valBuffer := PByte(tmpBuffer);
  5005. obj := Create_Field();
  5006. obj.setLong(buffer,F_OFFSET_0,VAL_1);
  5007. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5008. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5009. CheckEquals(VAL_1,valBuffer^);
  5010. obj.setLong(buffer,F_OFFSET_0,VAL_2);
  5011. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5012. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5013. CheckEquals(VAL_2,valBuffer^);
  5014. obj.setLong(buffer,F_OFFSET_0,VAL_3);
  5015. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5016. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5017. CheckEquals(VAL_3,valBuffer^);
  5018. intVal := 0;
  5019. Inc(tmpBuffer);
  5020. Inc(attributeBuffer);
  5021. valBuffer := PByte(tmpBuffer);
  5022. obj.setLong(buffer,F_OFFSET_1,VAL_1);
  5023. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5024. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5025. CheckEquals(VAL_1,valBuffer^);
  5026. obj.setLong(buffer,F_OFFSET_1,VAL_2);
  5027. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5028. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5029. CheckEquals(VAL_2,valBuffer^);
  5030. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  5031. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5032. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5033. CheckEquals(VAL_3,valBuffer^);
  5034. end;
  5035. procedure TSDOByteField_Test.setShort();
  5036. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5037. VAL_1 = 123; VAL_2 = 35; VAL_3 = 0;
  5038. var
  5039. obj : ISDOField;
  5040. intVal : QWord;
  5041. buffer, tmpBuffer, attributeBuffer : PByte;
  5042. valBuffer : PByte;
  5043. begin
  5044. intVal := 0;
  5045. buffer := @intVal;
  5046. tmpBuffer := buffer;
  5047. attributeBuffer := buffer;
  5048. Inc(tmpBuffer);
  5049. valBuffer := PByte(tmpBuffer);
  5050. obj := Create_Field();
  5051. obj.setShort(buffer,F_OFFSET_0,VAL_1);
  5052. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5053. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5054. CheckEquals(VAL_1,valBuffer^);
  5055. obj.setShort(buffer,F_OFFSET_0,VAL_2);
  5056. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5057. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5058. CheckEquals(VAL_2,valBuffer^);
  5059. obj.setShort(buffer,F_OFFSET_0,VAL_3);
  5060. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5061. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5062. CheckEquals(VAL_3,valBuffer^);
  5063. intVal := 0;
  5064. Inc(tmpBuffer);
  5065. Inc(attributeBuffer);
  5066. valBuffer := PByte(tmpBuffer);
  5067. obj.setShort(buffer,F_OFFSET_1,VAL_1);
  5068. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5069. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5070. CheckEquals(VAL_1,valBuffer^);
  5071. obj.setShort(buffer,F_OFFSET_1,VAL_2);
  5072. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5073. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5074. CheckEquals(VAL_2,valBuffer^);
  5075. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  5076. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5077. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5078. CheckEquals(VAL_3,valBuffer^);
  5079. end;
  5080. procedure TSDOByteField_Test.setString();
  5081. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5082. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  5083. var
  5084. obj : ISDOField;
  5085. intVal : QWord;
  5086. buffer, tmpBuffer, attributeBuffer : PByte;
  5087. valBuffer : PByte;
  5088. begin
  5089. intVal := 0;
  5090. buffer := @intVal;
  5091. tmpBuffer := buffer;
  5092. attributeBuffer := buffer;
  5093. Inc(tmpBuffer);
  5094. valBuffer := PByte(tmpBuffer);
  5095. obj := Create_Field();
  5096. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_1));
  5097. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5098. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5099. CheckEquals(VAL_1,valBuffer^);
  5100. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_2));
  5101. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5102. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5103. CheckEquals(VAL_2,valBuffer^);
  5104. intVal := 0;
  5105. Inc(tmpBuffer);
  5106. Inc(attributeBuffer);
  5107. valBuffer := PByte(tmpBuffer);
  5108. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_1));
  5109. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5110. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5111. CheckEquals(VAL_1,valBuffer^);
  5112. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_2));
  5113. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5114. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5115. CheckEquals(VAL_2,valBuffer^);
  5116. end;
  5117. procedure TSDOByteField_Test.setVariant();
  5118. const
  5119. F_OFFSET = 0;
  5120. var
  5121. obj : ISDOField;
  5122. intVal : QWord;
  5123. buffer : PByte;
  5124. i : TSDOByte;
  5125. begin
  5126. intVal := 0;
  5127. buffer := @intVal;
  5128. obj := Create_Field();
  5129. for i := Low(TSDOByte) to High(TSDOByte) do begin
  5130. obj.setVariant(buffer,F_OFFSET,i);
  5131. CheckEquals(i,obj.getByte(buffer,F_OFFSET));
  5132. end;
  5133. end;
  5134. { TSDODateField_Test }
  5135. procedure TSDODateField_Test.CheckEquals(expected, actual: TSDODate; msg: string; const AStrict : Boolean);
  5136. var
  5137. e, a : TDateTime;
  5138. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  5139. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  5140. begin
  5141. if AStrict then begin
  5142. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  5143. end else begin
  5144. e := NormalizeToUTC(expected);
  5145. a := NormalizeToUTC(actual);
  5146. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  5147. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  5148. CheckEquals(e_y,a_y,msg);
  5149. CheckEquals(e_m,a_m,msg);
  5150. CheckEquals(e_d,a_d,msg);
  5151. CheckEquals(e_h,a_h,msg);
  5152. CheckEquals(e_mn,a_mn,msg);
  5153. CheckEquals(e_ss,a_ss,msg);
  5154. CheckEquals(e_ms,a_ms,msg);
  5155. end;
  5156. end;
  5157. function TSDODateField_Test.Create_Field() : ISDOField;
  5158. begin
  5159. Result := TSDODateField.Create() as ISDOField;
  5160. end;
  5161. procedure TSDODateField_Test.getDate();
  5162. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5163. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5164. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5165. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5166. procedure SetConstants();
  5167. var
  5168. d : TSDODate;
  5169. begin
  5170. FillChar(d,SizeOf(TSDODate),#0);
  5171. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5172. d.HourOffset := 5;
  5173. d.MinuteOffset := 6;
  5174. PSDODate(@VAL_1)^ := d;
  5175. FillChar(d,SizeOf(TSDODate),#0);
  5176. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5177. d.HourOffset := 0;
  5178. d.MinuteOffset := 13;
  5179. PSDODate(@VAL_3)^ := d;
  5180. end;
  5181. var
  5182. obj : ISDOField;
  5183. trueBuffer : array[0..( 3 * SizeOf(TSDODate))] of Byte;
  5184. buffer, tmpBuffer, attributeBuffer : PByte;
  5185. valBuffer : PSDODate;
  5186. begin
  5187. SetConstants();
  5188. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5189. buffer := @(trueBuffer[0]);
  5190. tmpBuffer := buffer;
  5191. attributeBuffer := buffer;
  5192. Inc(tmpBuffer);
  5193. valBuffer := PSDODate(tmpBuffer);
  5194. obj := Create_Field();
  5195. valBuffer^ := VAL_1;
  5196. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5197. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5198. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  5199. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5200. CheckEquals(VAL_1,obj.getDate(buffer,F_OFFSET_0));
  5201. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5202. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5203. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  5204. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5205. CheckEquals(VAL_1,obj.getDate(buffer,F_OFFSET_0));
  5206. valBuffer^ := VAL_2;
  5207. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5208. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5209. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  5210. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5211. CheckEquals(VAL_2,obj.getDate(buffer,F_OFFSET_0));
  5212. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5213. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5214. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  5215. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5216. CheckEquals(VAL_2,obj.getDate(buffer,F_OFFSET_0));
  5217. valBuffer^ := VAL_3;
  5218. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5219. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5220. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  5221. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5222. CheckEquals(VAL_3,obj.getDate(buffer,F_OFFSET_0));
  5223. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5224. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5225. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  5226. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5227. CheckEquals(VAL_3,obj.getDate(buffer,F_OFFSET_0));
  5228. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5229. Inc(tmpBuffer);
  5230. Inc(attributeBuffer);
  5231. valBuffer := PSDODate(tmpBuffer);
  5232. valBuffer^ := VAL_1;
  5233. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5234. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5235. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5236. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5237. CheckEquals(VAL_1,obj.getDate(buffer,F_OFFSET_1));
  5238. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5239. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5240. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5241. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5242. CheckEquals(VAL_1,obj.getDate(buffer,F_OFFSET_1));
  5243. valBuffer^ := VAL_2;
  5244. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5245. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5246. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5247. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5248. CheckEquals(VAL_2,obj.getDate(buffer,F_OFFSET_1));
  5249. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5250. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5251. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5252. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5253. CheckEquals(VAL_2,obj.getDate(buffer,F_OFFSET_1));
  5254. valBuffer^ := VAL_3;
  5255. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5256. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5257. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5258. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5259. CheckEquals(VAL_3,obj.getDate(buffer,F_OFFSET_1));
  5260. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5261. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5262. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5263. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5264. CheckEquals(VAL_3,obj.getDate(buffer,F_OFFSET_1));
  5265. end;
  5266. procedure TSDODateField_Test.getString();
  5267. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5268. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5269. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5270. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5271. procedure SetConstants();
  5272. var
  5273. d : TSDODate;
  5274. begin
  5275. FillChar(d,SizeOf(TSDODate),#0);
  5276. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5277. d.HourOffset := 5;
  5278. d.MinuteOffset := 6;
  5279. PSDODate(@VAL_1)^ := d;
  5280. FillChar(d,SizeOf(TSDODate),#0);
  5281. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5282. d.HourOffset := 0;
  5283. d.MinuteOffset := 13;
  5284. PSDODate(@VAL_3)^ := d;
  5285. end;
  5286. var
  5287. obj : ISDOField;
  5288. trueBuffer : array[0..( 3 * SizeOf(TSDODate))] of Byte;
  5289. buffer, tmpBuffer, attributeBuffer : PByte;
  5290. valBuffer : PSDODate;
  5291. begin
  5292. SetConstants();
  5293. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5294. buffer := @(trueBuffer[0]);
  5295. tmpBuffer := buffer;
  5296. attributeBuffer := buffer;
  5297. Inc(tmpBuffer);
  5298. valBuffer := PSDODate(tmpBuffer);
  5299. obj := Create_Field();
  5300. valBuffer^ := VAL_1;
  5301. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5302. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5303. CheckEquals(xsd_DateTimeToStr(VAL_1,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5304. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5305. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5306. CheckEquals(xsd_DateTimeToStr(VAL_1,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5307. valBuffer^ := VAL_2;
  5308. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5309. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5310. CheckEquals(xsd_DateTimeToStr(VAL_2,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5311. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5312. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5313. CheckEquals(xsd_DateTimeToStr(VAL_2,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5314. valBuffer^ := VAL_3;
  5315. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5316. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5317. CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5318. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5319. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5320. CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5321. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5322. Inc(tmpBuffer);
  5323. Inc(attributeBuffer);
  5324. valBuffer := PSDODate(tmpBuffer);
  5325. valBuffer^ := VAL_1;
  5326. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5327. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5328. CheckEquals(xsd_DateTimeToStr(VAL_1,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5329. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5330. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5331. CheckEquals(xsd_DateTimeToStr(VAL_1,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5332. valBuffer^ := VAL_2;
  5333. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5334. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5335. CheckEquals(xsd_DateTimeToStr(VAL_2,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5336. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5337. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5338. CheckEquals(xsd_DateTimeToStr(VAL_2,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5339. valBuffer^ := VAL_3;
  5340. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5341. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5342. CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5343. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5344. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5345. CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5346. end;
  5347. procedure TSDODateField_Test.getVariant();
  5348. const F_OFFSET = 0;
  5349. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5350. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5351. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5352. procedure SetConstants();
  5353. var
  5354. d : TSDODate;
  5355. begin
  5356. FillChar(d,SizeOf(TSDODate),#0);
  5357. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5358. d.HourOffset := 5;
  5359. d.MinuteOffset := 6;
  5360. PSDODate(@VAL_1)^ := d;
  5361. FillChar(d,SizeOf(TSDODate),#0);
  5362. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5363. d.HourOffset := 0;
  5364. d.MinuteOffset := 13;
  5365. PSDODate(@VAL_3)^ := d;
  5366. end;
  5367. var
  5368. obj : ISDOField;
  5369. trueBuffer : array[0..(3 * SizeOf(TSDODate))] of Byte;
  5370. buffer : PByte;
  5371. v : Variant;
  5372. value : TSDODate;
  5373. a, b : TDateTime;
  5374. i : Integer;
  5375. begin
  5376. SetConstants();
  5377. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5378. buffer := @(trueBuffer[0]);
  5379. obj := Create_Field();
  5380. for i := 1 to 3 do begin
  5381. case i of
  5382. 1 : value := VAL_1;
  5383. 2 : value := VAL_2;
  5384. 3 : value := VAL_3;
  5385. end;
  5386. obj.setDate(buffer,F_OFFSET,value);
  5387. v := obj.getVariant(buffer,F_OFFSET);
  5388. a := v;
  5389. b := NormalizeToUTC(value);
  5390. CheckEquals(0,MilliSecondsBetween(a,b));
  5391. end;
  5392. end;
  5393. procedure TSDODateField_Test.setDate();
  5394. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5395. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5396. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5397. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5398. procedure SetConstants();
  5399. var
  5400. d : TSDODate;
  5401. begin
  5402. FillChar(d,SizeOf(TSDODate),#0);
  5403. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5404. d.HourOffset := 5;
  5405. d.MinuteOffset := 6;
  5406. PSDODate(@VAL_1)^ := d;
  5407. FillChar(d,SizeOf(TSDODate),#0);
  5408. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5409. d.HourOffset := 0;
  5410. d.MinuteOffset := 13;
  5411. PSDODate(@VAL_3)^ := d;
  5412. end;
  5413. var
  5414. obj : ISDOField;
  5415. trueBuffer : array[0..( 3 * SizeOf(TSDODate))] of Byte;
  5416. buffer, tmpBuffer, attributeBuffer : PByte;
  5417. valBuffer : PSDODate;
  5418. begin
  5419. SetConstants();
  5420. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5421. buffer := @(trueBuffer[0]);
  5422. tmpBuffer := buffer;
  5423. attributeBuffer := buffer;
  5424. Inc(tmpBuffer);
  5425. valBuffer := PSDODate(tmpBuffer);
  5426. obj := Create_Field();
  5427. obj.setDate(buffer,F_OFFSET_0,VAL_1);
  5428. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5429. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5430. CheckEquals(VAL_1,valBuffer^);
  5431. obj.setDate(buffer,F_OFFSET_0,VAL_2);
  5432. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5433. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5434. CheckEquals(VAL_2,valBuffer^);
  5435. obj.setDate(buffer,F_OFFSET_0,VAL_3);
  5436. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5437. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5438. CheckEquals(VAL_3,valBuffer^);
  5439. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5440. Inc(tmpBuffer);
  5441. Inc(attributeBuffer);
  5442. valBuffer := PSDODate(tmpBuffer);
  5443. obj.setDate(buffer,F_OFFSET_1,VAL_1);
  5444. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5445. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5446. CheckEquals(VAL_1,valBuffer^);
  5447. obj.setDate(buffer,F_OFFSET_1,VAL_2);
  5448. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5449. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5450. CheckEquals(VAL_2,valBuffer^);
  5451. obj.setDate(buffer,F_OFFSET_1,VAL_3);
  5452. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5453. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5454. CheckEquals(VAL_3,valBuffer^);
  5455. end;
  5456. procedure TSDODateField_Test.setString();
  5457. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5458. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5459. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5460. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5461. procedure SetConstants();
  5462. var
  5463. d : TSDODate;
  5464. begin
  5465. FillChar(d,SizeOf(TSDODate),#0);
  5466. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5467. d.HourOffset := 5;
  5468. d.MinuteOffset := 6;
  5469. PSDODate(@VAL_1)^ := d;
  5470. FillChar(d,SizeOf(TSDODate),#0);
  5471. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5472. d.HourOffset := 0;
  5473. d.MinuteOffset := 13;
  5474. PSDODate(@VAL_3)^ := d;
  5475. end;
  5476. var
  5477. obj : ISDOField;
  5478. trueBuffer : array[0..( 3 * SizeOf(TSDODate))] of Byte;
  5479. buffer, tmpBuffer, attributeBuffer : PByte;
  5480. valBuffer : PSDODate;
  5481. begin
  5482. SetConstants();
  5483. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5484. buffer := @(trueBuffer[0]);
  5485. tmpBuffer := buffer;
  5486. attributeBuffer := buffer;
  5487. Inc(tmpBuffer);
  5488. valBuffer := PSDODate(tmpBuffer);
  5489. obj := Create_Field();
  5490. obj.setString(buffer,F_OFFSET_0,xsd_DateTimeToStr(VAL_1,xdkDateTime));
  5491. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5492. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5493. CheckEquals(VAL_1,valBuffer^,'',False);
  5494. obj.setString(buffer,F_OFFSET_0,xsd_DateTimeToStr(VAL_2,xdkDateTime));
  5495. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5496. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5497. CheckEquals(VAL_2,valBuffer^);
  5498. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5499. Inc(tmpBuffer);
  5500. Inc(attributeBuffer);
  5501. valBuffer := PSDODate(tmpBuffer);
  5502. obj.setString(buffer,F_OFFSET_1,xsd_DateTimeToStr(VAL_1,xdkDateTime));
  5503. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5504. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5505. CheckEquals(VAL_1,valBuffer^,'',False);
  5506. obj.setString(buffer,F_OFFSET_1,xsd_DateTimeToStr(VAL_2,xdkDateTime));
  5507. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5508. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5509. CheckEquals(VAL_2,valBuffer^);
  5510. end;
  5511. procedure TSDODateField_Test.setVariant();
  5512. const F_OFFSET = 0;
  5513. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5514. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5515. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5516. procedure SetConstants();
  5517. var
  5518. d : TSDODate;
  5519. begin
  5520. FillChar(d,SizeOf(TSDODate),#0);
  5521. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5522. d.HourOffset := 5;
  5523. d.MinuteOffset := 6;
  5524. PSDODate(@VAL_1)^ := d;
  5525. FillChar(d,SizeOf(TSDODate),#0);
  5526. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5527. d.HourOffset := 0;
  5528. d.MinuteOffset := 13;
  5529. PSDODate(@VAL_3)^ := d;
  5530. end;
  5531. var
  5532. obj : ISDOField;
  5533. trueBuffer : array[0..(3 * SizeOf(TSDODate))] of Byte;
  5534. buffer : PByte;
  5535. v : Variant;
  5536. value : TSDODate;
  5537. a, b : TDateTime;
  5538. i : Integer;
  5539. begin
  5540. SetConstants();
  5541. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5542. buffer := @(trueBuffer[0]);
  5543. obj := Create_Field();
  5544. for i := 1 to 3 do begin
  5545. case i of
  5546. 1 : value := VAL_1;
  5547. 2 : value := VAL_2;
  5548. 3 : value := VAL_3;
  5549. end;
  5550. b := NormalizeToUTC(value);
  5551. obj.setVariant(buffer,F_OFFSET,b);
  5552. a := NormalizeToUTC(obj.getDate(buffer,F_OFFSET));
  5553. CheckEquals(0,MilliSecondsBetween(a,b));
  5554. end;
  5555. end;
  5556. {$IFDEF HAS_SDO_CHAR}
  5557. { TSDOCharField_Test }
  5558. function TSDOCharField_Test.Create_Field() : ISDOField;
  5559. begin
  5560. Result := TSDOCharField.Create() as ISDOField;
  5561. end;
  5562. procedure TSDOCharField_Test.getBoolean();
  5563. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5564. VAL_1 = TSDOChar('X'); VAL_2 = TSDOChar('Y'); VAL_3 = TSDOChar(#0);
  5565. var
  5566. obj : ISDOField;
  5567. intVal : QWord;
  5568. buffer, tmpBuffer, attributeBuffer : PByte;
  5569. valBuffer : PSDOChar;
  5570. begin
  5571. intVal := 0;
  5572. buffer := @intVal;
  5573. tmpBuffer := buffer;
  5574. attributeBuffer := buffer;
  5575. Inc(tmpBuffer);
  5576. valBuffer := PSDOChar(tmpBuffer);
  5577. obj := Create_Field();
  5578. valBuffer^ := VAL_1;
  5579. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5580. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5581. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  5582. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5583. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5584. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  5585. valBuffer^ := VAL_2;
  5586. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5587. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5588. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  5589. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5590. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5591. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  5592. valBuffer^ := VAL_3;
  5593. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5594. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5595. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  5596. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5597. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5598. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  5599. intVal := 0;
  5600. Inc(tmpBuffer);
  5601. Inc(attributeBuffer);
  5602. valBuffer := PSDOChar(tmpBuffer);
  5603. valBuffer^ := VAL_1;
  5604. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5605. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5606. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  5607. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5608. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5609. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  5610. valBuffer^ := VAL_2;
  5611. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5612. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5613. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  5614. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5615. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5616. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  5617. valBuffer^ := VAL_3;
  5618. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5619. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5620. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  5621. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5622. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5623. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  5624. end;
  5625. procedure TSDOCharField_Test.getByte();
  5626. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5627. VAL_1 = TSDOChar(#123); VAL_2 = TSDOChar(#45); VAL_3 = TSDOChar(#0);
  5628. var
  5629. obj : ISDOField;
  5630. intVal : QWord;
  5631. buffer, tmpBuffer, attributeBuffer : PByte;
  5632. valBuffer : PSDOChar;
  5633. begin
  5634. intVal := 0;
  5635. buffer := @intVal;
  5636. tmpBuffer := buffer;
  5637. attributeBuffer := buffer;
  5638. Inc(tmpBuffer);
  5639. valBuffer := PSDOChar(tmpBuffer);
  5640. obj := Create_Field();
  5641. valBuffer^ := VAL_1;
  5642. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5643. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5644. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5645. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5646. CheckEquals(Ord(VAL_1),obj.getByte(buffer,F_OFFSET_0));
  5647. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5648. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5649. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5650. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5651. CheckEquals(Ord(VAL_1),obj.getByte(buffer,F_OFFSET_0));
  5652. valBuffer^ := VAL_2;
  5653. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5654. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5655. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5656. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5657. CheckEquals(Ord(VAL_2),obj.getByte(buffer,F_OFFSET_0));
  5658. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5659. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5660. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5661. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5662. CheckEquals(Ord(VAL_2),obj.getByte(buffer,F_OFFSET_0));
  5663. valBuffer^ := VAL_3;
  5664. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5665. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5666. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5667. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5668. CheckEquals(Ord(VAL_3),obj.getByte(buffer,F_OFFSET_0));
  5669. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5670. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5671. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5672. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5673. CheckEquals(Ord(VAL_3),obj.getByte(buffer,F_OFFSET_0));
  5674. intVal := 0;
  5675. Inc(tmpBuffer);
  5676. Inc(attributeBuffer);
  5677. valBuffer := PSDOChar(tmpBuffer);
  5678. valBuffer^ := VAL_1;
  5679. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5680. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5681. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5682. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5683. CheckEquals(Ord(VAL_1),obj.getByte(buffer,F_OFFSET_1));
  5684. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5685. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5686. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5687. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5688. CheckEquals(Ord(VAL_1),obj.getByte(buffer,F_OFFSET_1));
  5689. valBuffer^ := VAL_2;
  5690. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5691. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5692. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5693. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5694. CheckEquals(Ord(VAL_2),obj.getByte(buffer,F_OFFSET_1));
  5695. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5696. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5697. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5698. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5699. CheckEquals(Ord(VAL_2),obj.getByte(buffer,F_OFFSET_1));
  5700. valBuffer^ := VAL_3;
  5701. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5702. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5703. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5704. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5705. CheckEquals(Ord(VAL_3),obj.getByte(buffer,F_OFFSET_1));
  5706. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5707. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5708. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5709. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5710. CheckEquals(Ord(VAL_3),obj.getByte(buffer,F_OFFSET_1));
  5711. end;
  5712. procedure TSDOCharField_Test.getCharacter();
  5713. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5714. VAL_1 = TSDOChar('a'); VAL_2 = TSDOChar('i'); VAL_3 = TSDOChar('1');
  5715. var
  5716. obj : ISDOField;
  5717. intVal : QWord;
  5718. buffer, tmpBuffer, attributeBuffer : PByte;
  5719. valBuffer : PSDOChar;
  5720. begin
  5721. intVal := 0;
  5722. buffer := @intVal;
  5723. tmpBuffer := buffer;
  5724. attributeBuffer := buffer;
  5725. Inc(tmpBuffer);
  5726. valBuffer := PSDOChar(tmpBuffer);
  5727. obj := Create_Field();
  5728. valBuffer^ := VAL_1;
  5729. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5730. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5731. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5732. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5733. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_0));
  5734. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5735. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5736. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5737. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5738. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_0));
  5739. valBuffer^ := VAL_2;
  5740. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5741. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5742. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5743. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5744. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_0));
  5745. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5746. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5747. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5748. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5749. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_0));
  5750. valBuffer^ := VAL_3;
  5751. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5752. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5753. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5754. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5755. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_0));
  5756. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5757. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5758. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5759. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5760. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_0));
  5761. intVal := 0;
  5762. Inc(tmpBuffer);
  5763. Inc(attributeBuffer);
  5764. valBuffer := PSDOChar(tmpBuffer);
  5765. valBuffer^ := VAL_1;
  5766. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5767. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5768. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5769. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5770. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_1));
  5771. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5772. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5773. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5774. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5775. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_1));
  5776. valBuffer^ := VAL_2;
  5777. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5778. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5779. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5780. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5781. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_1));
  5782. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5783. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5784. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5785. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5786. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_1));
  5787. valBuffer^ := VAL_3;
  5788. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5789. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5790. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5791. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5792. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_1));
  5793. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5794. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5795. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5796. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5797. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_1));
  5798. end;
  5799. procedure TSDOCharField_Test.getInteger();
  5800. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5801. VAL_1 = TSDOChar(#97); VAL_2 = TSDOChar(#48); VAL_3 = TSDOChar(#100);
  5802. var
  5803. obj : ISDOField;
  5804. intVal : QWord;
  5805. buffer, tmpBuffer, attributeBuffer : PByte;
  5806. valBuffer : PSDOChar;
  5807. begin
  5808. intVal := 0;
  5809. buffer := @intVal;
  5810. tmpBuffer := buffer;
  5811. attributeBuffer := buffer;
  5812. Inc(tmpBuffer);
  5813. valBuffer := PSDOChar(tmpBuffer);
  5814. obj := Create_Field();
  5815. valBuffer^ := VAL_1;
  5816. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5817. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5818. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5819. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5820. CheckEquals(Ord(VAL_1),obj.getInteger(buffer,F_OFFSET_0));
  5821. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5822. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5823. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5824. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5825. CheckEquals(Ord(Ord(VAL_1)),obj.getInteger(buffer,F_OFFSET_0));
  5826. valBuffer^ := VAL_2;
  5827. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5828. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5829. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5830. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5831. CheckEquals(Ord(VAL_2),obj.getInteger(buffer,F_OFFSET_0));
  5832. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5833. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5834. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5835. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5836. CheckEquals(Ord(VAL_2),obj.getInteger(buffer,F_OFFSET_0));
  5837. valBuffer^ := VAL_3;
  5838. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5839. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5840. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5841. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5842. CheckEquals(Ord(VAL_3),obj.getInteger(buffer,F_OFFSET_0));
  5843. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5844. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5845. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5846. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5847. CheckEquals(Ord(VAL_3),obj.getInteger(buffer,F_OFFSET_0));
  5848. intVal := 0;
  5849. Inc(tmpBuffer);
  5850. Inc(attributeBuffer);
  5851. valBuffer := PSDOChar(tmpBuffer);
  5852. valBuffer^ := VAL_1;
  5853. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5854. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5855. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5856. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5857. CheckEquals(Ord(VAL_1),obj.getInteger(buffer,F_OFFSET_1));
  5858. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5859. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5860. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5861. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5862. CheckEquals(Ord(VAL_1),obj.getInteger(buffer,F_OFFSET_1));
  5863. valBuffer^ := VAL_2;
  5864. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5865. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5866. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5867. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5868. CheckEquals(Ord(VAL_2),obj.getInteger(buffer,F_OFFSET_1));
  5869. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5870. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5871. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5872. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5873. CheckEquals(Ord(VAL_2),obj.getInteger(buffer,F_OFFSET_1));
  5874. valBuffer^ := VAL_3;
  5875. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5876. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5877. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5878. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5879. CheckEquals(Ord(VAL_3),obj.getInteger(buffer,F_OFFSET_1));
  5880. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5881. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5882. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5883. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5884. CheckEquals(Ord(VAL_3),obj.getInteger(buffer,F_OFFSET_1));
  5885. end;
  5886. procedure TSDOCharField_Test.getLong();
  5887. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5888. VAL_1 = TSDOChar(#97); VAL_2 = TSDOChar(#48); VAL_3 = TSDOChar(#100);
  5889. var
  5890. obj : ISDOField;
  5891. intVal : QWord;
  5892. buffer, tmpBuffer, attributeBuffer : PByte;
  5893. valBuffer : PSDOChar;
  5894. begin
  5895. intVal := 0;
  5896. buffer := @intVal;
  5897. tmpBuffer := buffer;
  5898. attributeBuffer := buffer;
  5899. Inc(tmpBuffer);
  5900. valBuffer := PSDOChar(tmpBuffer);
  5901. obj := Create_Field();
  5902. valBuffer^ := VAL_1;
  5903. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5904. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5905. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5906. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5907. CheckEquals(Ord(VAL_1),obj.getLong(buffer,F_OFFSET_0));
  5908. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5909. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5910. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5911. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5912. CheckEquals(Ord(Ord(VAL_1)),obj.getLong(buffer,F_OFFSET_0));
  5913. valBuffer^ := VAL_2;
  5914. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5915. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5916. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5917. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5918. CheckEquals(Ord(VAL_2),obj.getLong(buffer,F_OFFSET_0));
  5919. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5920. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5921. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5922. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5923. CheckEquals(Ord(VAL_2),obj.getLong(buffer,F_OFFSET_0));
  5924. valBuffer^ := VAL_3;
  5925. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5926. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5927. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5928. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5929. CheckEquals(Ord(VAL_3),obj.getLong(buffer,F_OFFSET_0));
  5930. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5931. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5932. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5933. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5934. CheckEquals(Ord(VAL_3),obj.getLong(buffer,F_OFFSET_0));
  5935. intVal := 0;
  5936. Inc(tmpBuffer);
  5937. Inc(attributeBuffer);
  5938. valBuffer := PSDOChar(tmpBuffer);
  5939. valBuffer^ := VAL_1;
  5940. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5941. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5942. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5943. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5944. CheckEquals(Ord(VAL_1),obj.getLong(buffer,F_OFFSET_1));
  5945. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5946. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5947. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5948. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5949. CheckEquals(Ord(VAL_1),obj.getLong(buffer,F_OFFSET_1));
  5950. valBuffer^ := VAL_2;
  5951. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5952. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5953. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5954. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5955. CheckEquals(Ord(VAL_2),obj.getLong(buffer,F_OFFSET_1));
  5956. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5957. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5958. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5959. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5960. CheckEquals(Ord(VAL_2),obj.getLong(buffer,F_OFFSET_1));
  5961. valBuffer^ := VAL_3;
  5962. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5963. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5964. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5965. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5966. CheckEquals(Ord(VAL_3),obj.getLong(buffer,F_OFFSET_1));
  5967. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5968. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5969. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5970. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5971. CheckEquals(Ord(VAL_3),obj.getLong(buffer,F_OFFSET_1));
  5972. end;
  5973. procedure TSDOCharField_Test.getShort();
  5974. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5975. VAL_1 = TSDOChar(#97); VAL_2 = TSDOChar(#48); VAL_3 = TSDOChar(#100);
  5976. var
  5977. obj : ISDOField;
  5978. intVal : QWord;
  5979. buffer, tmpBuffer, attributeBuffer : PByte;
  5980. valBuffer : PSDOChar;
  5981. begin
  5982. intVal := 0;
  5983. buffer := @intVal;
  5984. tmpBuffer := buffer;
  5985. attributeBuffer := buffer;
  5986. Inc(tmpBuffer);
  5987. valBuffer := PSDOChar(tmpBuffer);
  5988. obj := Create_Field();
  5989. valBuffer^ := VAL_1;
  5990. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5991. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5992. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  5993. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5994. CheckEquals(Ord(VAL_1),obj.getShort(buffer,F_OFFSET_0));
  5995. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5996. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5997. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  5998. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5999. CheckEquals(Ord(Ord(VAL_1)),obj.getShort(buffer,F_OFFSET_0));
  6000. valBuffer^ := VAL_2;
  6001. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6002. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6003. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6004. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6005. CheckEquals(Ord(VAL_2),obj.getShort(buffer,F_OFFSET_0));
  6006. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6007. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6008. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6009. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6010. CheckEquals(Ord(VAL_2),obj.getShort(buffer,F_OFFSET_0));
  6011. valBuffer^ := VAL_3;
  6012. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6013. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6014. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6015. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6016. CheckEquals(Ord(VAL_3),obj.getShort(buffer,F_OFFSET_0));
  6017. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6018. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6019. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6020. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6021. CheckEquals(Ord(VAL_3),obj.getShort(buffer,F_OFFSET_0));
  6022. intVal := 0;
  6023. Inc(tmpBuffer);
  6024. Inc(attributeBuffer);
  6025. valBuffer := PSDOChar(tmpBuffer);
  6026. valBuffer^ := VAL_1;
  6027. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6028. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6029. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6030. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6031. CheckEquals(Ord(VAL_1),obj.getShort(buffer,F_OFFSET_1));
  6032. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6033. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6034. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6035. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6036. CheckEquals(Ord(VAL_1),obj.getShort(buffer,F_OFFSET_1));
  6037. valBuffer^ := VAL_2;
  6038. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6039. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6040. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6041. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6042. CheckEquals(Ord(VAL_2),obj.getShort(buffer,F_OFFSET_1));
  6043. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6044. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6045. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6046. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6047. CheckEquals(Ord(VAL_2),obj.getShort(buffer,F_OFFSET_1));
  6048. valBuffer^ := VAL_3;
  6049. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6050. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6051. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6052. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6053. CheckEquals(Ord(VAL_3),obj.getShort(buffer,F_OFFSET_1));
  6054. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6055. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6056. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6057. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6058. CheckEquals(Ord(VAL_3),obj.getShort(buffer,F_OFFSET_1));
  6059. end;
  6060. procedure TSDOCharField_Test.getString();
  6061. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6062. VAL_1 = TSDOChar('a'); VAL_2 = TSDOChar('b'); VAL_3 = TSDOChar('c');
  6063. var
  6064. obj : ISDOField;
  6065. intVal : QWord;
  6066. buffer, tmpBuffer, attributeBuffer : PByte;
  6067. valBuffer : PSDOChar;
  6068. begin
  6069. intVal := 0;
  6070. buffer := @intVal;
  6071. tmpBuffer := buffer;
  6072. attributeBuffer := buffer;
  6073. Inc(tmpBuffer);
  6074. valBuffer := PSDOChar(tmpBuffer);
  6075. obj := Create_Field();
  6076. valBuffer^ := VAL_1;
  6077. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6078. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6079. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  6080. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6081. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6082. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  6083. valBuffer^ := VAL_2;
  6084. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6085. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6086. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  6087. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6088. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6089. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  6090. valBuffer^ := VAL_3;
  6091. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6092. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6093. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  6094. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6095. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6096. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  6097. intVal := 0;
  6098. Inc(tmpBuffer);
  6099. Inc(attributeBuffer);
  6100. valBuffer := PSDOChar(tmpBuffer);
  6101. valBuffer^ := VAL_1;
  6102. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6103. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6104. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  6105. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6106. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6107. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  6108. valBuffer^ := VAL_2;
  6109. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6110. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6111. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  6112. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6113. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6114. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  6115. valBuffer^ := VAL_3;
  6116. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6117. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6118. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  6119. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6120. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6121. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  6122. end;
  6123. procedure TSDOCharField_Test.getVariant();
  6124. const
  6125. F_OFFSET = 0;
  6126. SAMPLE_VALUES : array[0..2] of TSDOChar = (TSDOChar(#97),TSDOChar(#48),TSDOChar(#100));
  6127. var
  6128. obj : ISDOField;
  6129. intVal : QWord;
  6130. buffer : PByte;
  6131. v : Variant;
  6132. i : Integer;
  6133. a : TSDOChar;
  6134. begin
  6135. intVal := 0;
  6136. buffer := @intVal;
  6137. obj := Create_Field();
  6138. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  6139. obj.setCharacter(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  6140. v := obj.getVariant(buffer,F_OFFSET);
  6141. a := v;
  6142. Check(SAMPLE_VALUES[i] = a);
  6143. end;
  6144. end;
  6145. procedure TSDOCharField_Test.setBoolean();
  6146. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6147. var
  6148. obj : ISDOField;
  6149. intVal : QWord;
  6150. buffer, tmpBuffer, attributeBuffer : PByte;
  6151. valBuffer : PSDOChar;
  6152. begin
  6153. intVal := 0;
  6154. buffer := @intVal;
  6155. tmpBuffer := buffer;
  6156. attributeBuffer := buffer;
  6157. Inc(tmpBuffer);
  6158. valBuffer := PSDOChar(tmpBuffer);
  6159. obj := Create_Field();
  6160. obj.setBoolean(buffer,F_OFFSET_0,True);
  6161. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6162. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6163. CheckEquals('1',valBuffer^);
  6164. obj.setBoolean(buffer,F_OFFSET_0,False);
  6165. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6166. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6167. CheckEquals('0',valBuffer^);
  6168. intVal := 0;
  6169. Inc(tmpBuffer);
  6170. Inc(attributeBuffer);
  6171. valBuffer := PSDOChar(tmpBuffer);
  6172. obj.setBoolean(buffer,F_OFFSET_1,True);
  6173. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6174. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6175. CheckEquals('1',valBuffer^);
  6176. obj.setBoolean(buffer,F_OFFSET_1,False);
  6177. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6178. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6179. CheckEquals('0',valBuffer^);
  6180. end;
  6181. procedure TSDOCharField_Test.setByte();
  6182. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6183. VAL_1 = TSDOChar(#98); VAL_2 = TSDOChar(#56); VAL_3 = TSDOChar(#110);
  6184. var
  6185. obj : ISDOField;
  6186. intVal : QWord;
  6187. buffer, tmpBuffer, attributeBuffer : PByte;
  6188. valBuffer : PSDOChar;
  6189. begin
  6190. intVal := 0;
  6191. buffer := @intVal;
  6192. tmpBuffer := buffer;
  6193. attributeBuffer := buffer;
  6194. Inc(tmpBuffer);
  6195. valBuffer := PSDOChar(tmpBuffer);
  6196. obj := Create_Field();
  6197. obj.setByte(buffer,F_OFFSET_0,Ord(VAL_1));
  6198. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6199. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6200. CheckEquals(VAL_1,valBuffer^);
  6201. obj.setByte(buffer,F_OFFSET_0,Ord(VAL_2));
  6202. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6203. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6204. CheckEquals(VAL_2,valBuffer^);
  6205. obj.setByte(buffer,F_OFFSET_0,Ord(VAL_3));
  6206. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6207. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6208. CheckEquals(VAL_3,valBuffer^);
  6209. intVal := 0;
  6210. Inc(tmpBuffer);
  6211. Inc(attributeBuffer);
  6212. valBuffer := PSDOChar(tmpBuffer);
  6213. obj.setByte(buffer,F_OFFSET_1,Ord(VAL_1));
  6214. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6215. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6216. CheckEquals(VAL_1,valBuffer^);
  6217. obj.setByte(buffer,F_OFFSET_1,Ord(VAL_2));
  6218. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6219. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6220. CheckEquals(VAL_2,valBuffer^);
  6221. obj.setByte(buffer,F_OFFSET_1,Ord(VAL_3));
  6222. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6223. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6224. CheckEquals(VAL_3,valBuffer^);
  6225. end;
  6226. procedure TSDOCharField_Test.setCharacter();
  6227. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6228. VAL_1 = TSDOChar('A'); VAL_2 = TSDOChar('b'); VAL_3 = TSDOChar('1');
  6229. var
  6230. obj : ISDOField;
  6231. intVal : QWord;
  6232. buffer, tmpBuffer, attributeBuffer : PByte;
  6233. valBuffer : PSDOChar;
  6234. begin
  6235. intVal := 0;
  6236. buffer := @intVal;
  6237. tmpBuffer := buffer;
  6238. attributeBuffer := buffer;
  6239. Inc(tmpBuffer);
  6240. valBuffer := PSDOChar(tmpBuffer);
  6241. obj := Create_Field();
  6242. obj.setCharacter(buffer,F_OFFSET_0,VAL_1);
  6243. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6244. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6245. CheckEquals(VAL_1,valBuffer^);
  6246. obj.setCharacter(buffer,F_OFFSET_0,VAL_2);
  6247. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6248. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6249. CheckEquals(VAL_2,valBuffer^);
  6250. obj.setCharacter(buffer,F_OFFSET_0,VAL_3);
  6251. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6252. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6253. CheckEquals(VAL_3,valBuffer^);
  6254. intVal := 0;
  6255. Inc(tmpBuffer);
  6256. Inc(attributeBuffer);
  6257. valBuffer := PSDOChar(tmpBuffer);
  6258. obj.setCharacter(buffer,F_OFFSET_1,VAL_1);
  6259. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6260. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6261. CheckEquals(VAL_1,valBuffer^);
  6262. obj.setCharacter(buffer,F_OFFSET_1,VAL_2);
  6263. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6264. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6265. CheckEquals(VAL_2,valBuffer^);
  6266. obj.setCharacter(buffer,F_OFFSET_1,VAL_3);
  6267. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6268. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6269. CheckEquals(VAL_3,valBuffer^);
  6270. end;
  6271. procedure TSDOCharField_Test.setInteger();
  6272. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6273. VAL_1 = TSDOChar(#98); VAL_2 = TSDOChar(#56); VAL_3 = TSDOChar(#110);
  6274. var
  6275. obj : ISDOField;
  6276. intVal : QWord;
  6277. buffer, tmpBuffer, attributeBuffer : PByte;
  6278. valBuffer : PSDOChar;
  6279. begin
  6280. intVal := 0;
  6281. buffer := @intVal;
  6282. tmpBuffer := buffer;
  6283. attributeBuffer := buffer;
  6284. Inc(tmpBuffer);
  6285. valBuffer := PSDOChar(tmpBuffer);
  6286. obj := Create_Field();
  6287. obj.setInteger(buffer,F_OFFSET_0,Ord(VAL_1));
  6288. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6289. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6290. CheckEquals(VAL_1,valBuffer^);
  6291. obj.setInteger(buffer,F_OFFSET_0,Ord(VAL_2));
  6292. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6293. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6294. CheckEquals(VAL_2,valBuffer^);
  6295. obj.setInteger(buffer,F_OFFSET_0,Ord(VAL_3));
  6296. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6297. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6298. CheckEquals(VAL_3,valBuffer^);
  6299. intVal := 0;
  6300. Inc(tmpBuffer);
  6301. Inc(attributeBuffer);
  6302. valBuffer := PSDOChar(tmpBuffer);
  6303. obj.setInteger(buffer,F_OFFSET_1,Ord(VAL_1));
  6304. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6305. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6306. CheckEquals(VAL_1,valBuffer^);
  6307. obj.setInteger(buffer,F_OFFSET_1,Ord(VAL_2));
  6308. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6309. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6310. CheckEquals(VAL_2,valBuffer^);
  6311. obj.setInteger(buffer,F_OFFSET_1,Ord(VAL_3));
  6312. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6313. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6314. CheckEquals(VAL_3,valBuffer^);
  6315. end;
  6316. procedure TSDOCharField_Test.setLong();
  6317. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6318. VAL_1 = TSDOChar(#98); VAL_2 = TSDOChar(#56); VAL_3 = TSDOChar(#110);
  6319. var
  6320. obj : ISDOField;
  6321. intVal : QWord;
  6322. buffer, tmpBuffer, attributeBuffer : PByte;
  6323. valBuffer : PSDOChar;
  6324. begin
  6325. intVal := 0;
  6326. buffer := @intVal;
  6327. tmpBuffer := buffer;
  6328. attributeBuffer := buffer;
  6329. Inc(tmpBuffer);
  6330. valBuffer := PSDOChar(tmpBuffer);
  6331. obj := Create_Field();
  6332. obj.setLong(buffer,F_OFFSET_0,Ord(VAL_1));
  6333. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6334. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6335. CheckEquals(VAL_1,valBuffer^);
  6336. obj.setLong(buffer,F_OFFSET_0,Ord(VAL_2));
  6337. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6338. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6339. CheckEquals(VAL_2,valBuffer^);
  6340. obj.setLong(buffer,F_OFFSET_0,Ord(VAL_3));
  6341. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6342. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6343. CheckEquals(VAL_3,valBuffer^);
  6344. intVal := 0;
  6345. Inc(tmpBuffer);
  6346. Inc(attributeBuffer);
  6347. valBuffer := PSDOChar(tmpBuffer);
  6348. obj.setLong(buffer,F_OFFSET_1,Ord(VAL_1));
  6349. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6350. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6351. CheckEquals(VAL_1,valBuffer^);
  6352. obj.setLong(buffer,F_OFFSET_1,Ord(VAL_2));
  6353. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6354. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6355. CheckEquals(VAL_2,valBuffer^);
  6356. obj.setLong(buffer,F_OFFSET_1,Ord(VAL_3));
  6357. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6358. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6359. CheckEquals(VAL_3,valBuffer^);
  6360. end;
  6361. procedure TSDOCharField_Test.setShort();
  6362. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6363. VAL_1 = TSDOChar(#98); VAL_2 = TSDOChar(#56); VAL_3 = TSDOChar(#110);
  6364. var
  6365. obj : ISDOField;
  6366. intVal : QWord;
  6367. buffer, tmpBuffer, attributeBuffer : PByte;
  6368. valBuffer : PSDOChar;
  6369. begin
  6370. intVal := 0;
  6371. buffer := @intVal;
  6372. tmpBuffer := buffer;
  6373. attributeBuffer := buffer;
  6374. Inc(tmpBuffer);
  6375. valBuffer := PSDOChar(tmpBuffer);
  6376. obj := Create_Field();
  6377. obj.setShort(buffer,F_OFFSET_0,Ord(VAL_1));
  6378. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6379. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6380. CheckEquals(VAL_1,valBuffer^);
  6381. obj.setShort(buffer,F_OFFSET_0,Ord(VAL_2));
  6382. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6383. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6384. CheckEquals(VAL_2,valBuffer^);
  6385. obj.setShort(buffer,F_OFFSET_0,Ord(VAL_3));
  6386. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6387. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6388. CheckEquals(VAL_3,valBuffer^);
  6389. intVal := 0;
  6390. Inc(tmpBuffer);
  6391. Inc(attributeBuffer);
  6392. valBuffer := PSDOChar(tmpBuffer);
  6393. obj.setShort(buffer,F_OFFSET_1,Ord(VAL_1));
  6394. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6395. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6396. CheckEquals(VAL_1,valBuffer^);
  6397. obj.setShort(buffer,F_OFFSET_1,Ord(VAL_2));
  6398. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6399. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6400. CheckEquals(VAL_2,valBuffer^);
  6401. obj.setShort(buffer,F_OFFSET_1,Ord(VAL_3));
  6402. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6403. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6404. CheckEquals(VAL_3,valBuffer^);
  6405. end;
  6406. procedure TSDOCharField_Test.setString();
  6407. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6408. VAL_1 = TSDOChar('a'); VAL_2 = TSDOChar('b'); VAL_3 = TSDOChar('c');
  6409. var
  6410. obj : ISDOField;
  6411. intVal : QWord;
  6412. buffer, tmpBuffer, attributeBuffer : PByte;
  6413. valBuffer : PSDOChar;
  6414. begin
  6415. intVal := 0;
  6416. buffer := @intVal;
  6417. tmpBuffer := buffer;
  6418. attributeBuffer := buffer;
  6419. Inc(tmpBuffer);
  6420. valBuffer := PSDOChar(tmpBuffer);
  6421. obj := Create_Field();
  6422. obj.setString(buffer,F_OFFSET_0,VAL_1);
  6423. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6424. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6425. CheckEquals(VAL_1,valBuffer^);
  6426. obj.setString(buffer,F_OFFSET_0,VAL_2);
  6427. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6428. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6429. CheckEquals(VAL_2,valBuffer^);
  6430. intVal := 0;
  6431. Inc(tmpBuffer);
  6432. Inc(attributeBuffer);
  6433. valBuffer := PSDOChar(tmpBuffer);
  6434. obj.setString(buffer,F_OFFSET_1,VAL_1);
  6435. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6436. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6437. CheckEquals(VAL_1,valBuffer^);
  6438. obj.setString(buffer,F_OFFSET_1,VAL_2);
  6439. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6440. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6441. CheckEquals(VAL_2,valBuffer^);
  6442. end;
  6443. procedure TSDOCharField_Test.setVariant();
  6444. const
  6445. F_OFFSET = 0;
  6446. SAMPLE_VALUES : array[0..2] of TSDOChar = (TSDOChar(#97),TSDOChar(#48),TSDOChar(#100));
  6447. var
  6448. obj : ISDOField;
  6449. intVal : QWord;
  6450. buffer : PByte;
  6451. i : Integer;
  6452. a : TSDOChar;
  6453. begin
  6454. intVal := 0;
  6455. buffer := @intVal;
  6456. obj := Create_Field();
  6457. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  6458. obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  6459. a := obj.getCharacter(buffer,F_OFFSET);
  6460. CheckEquals(Ord(SAMPLE_VALUES[i]),Ord(a));
  6461. end;
  6462. end;
  6463. {$ENDIF HAS_SDO_CHAR}
  6464. {$IFDEF HAS_SDO_LONG}
  6465. { TSDOLongField_Test }
  6466. function TSDOLongField_Test.Create_Field() : ISDOField;
  6467. begin
  6468. Result := TSDOLongField.Create() as ISDOField;
  6469. end;
  6470. procedure TSDOLongField_Test.getBoolean();
  6471. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6472. VAL_1 = 12345678912345; VAL_2 = -12345678912345; VAL_3 = 0;
  6473. var
  6474. obj : ISDOField;
  6475. intVal : array[0..100] of Byte;
  6476. buffer, tmpBuffer, attributeBuffer : PByte;
  6477. valBuffer : PSDOLong;
  6478. begin
  6479. FillChar(intVal,SizeOf(intVal),#0);
  6480. buffer := @intVal;
  6481. tmpBuffer := buffer;
  6482. attributeBuffer := buffer;
  6483. Inc(tmpBuffer);
  6484. valBuffer := PSDOLong(tmpBuffer);
  6485. obj := Create_Field();
  6486. valBuffer^ := VAL_1;
  6487. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6488. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6489. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6490. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6491. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6492. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6493. valBuffer^ := VAL_2;
  6494. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6495. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6496. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6497. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6498. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6499. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6500. valBuffer^ := VAL_3;
  6501. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6502. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6503. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  6504. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6505. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6506. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  6507. FillChar(intVal,SizeOf(intVal),#0);
  6508. Inc(tmpBuffer);
  6509. Inc(attributeBuffer);
  6510. valBuffer := PSDOLong(tmpBuffer);
  6511. valBuffer^ := VAL_1;
  6512. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6513. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6514. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6515. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6516. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6517. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6518. valBuffer^ := VAL_2;
  6519. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6520. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6521. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6522. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6523. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6524. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6525. valBuffer^ := VAL_3;
  6526. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6527. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6528. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  6529. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6530. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6531. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  6532. end;
  6533. procedure TSDOLongField_Test.getByte();
  6534. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6535. VAL_1 = 12; VAL_2 = 123; VAL_3 = 0;
  6536. var
  6537. obj : ISDOField;
  6538. intVal : array[0..100] of Byte;
  6539. buffer, tmpBuffer, attributeBuffer : PByte;
  6540. valBuffer : PSDOLong;
  6541. begin
  6542. FillChar(intVal,SizeOf(intVal),#0);
  6543. buffer := @intVal;
  6544. tmpBuffer := buffer;
  6545. attributeBuffer := buffer;
  6546. Inc(tmpBuffer);
  6547. valBuffer := PSDOLong(tmpBuffer);
  6548. obj := Create_Field();
  6549. valBuffer^ := VAL_1;
  6550. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6551. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6552. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6553. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6554. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  6555. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6556. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6557. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6558. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6559. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  6560. valBuffer^ := VAL_2;
  6561. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6562. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6563. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6564. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6565. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  6566. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6567. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6568. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6569. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6570. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  6571. valBuffer^ := VAL_3;
  6572. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6573. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6574. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6575. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6576. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  6577. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6578. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6579. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6580. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6581. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  6582. FillChar(intVal,SizeOf(intVal),#0);
  6583. Inc(tmpBuffer);
  6584. Inc(attributeBuffer);
  6585. valBuffer := PSDOLong(tmpBuffer);
  6586. valBuffer^ := VAL_1;
  6587. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6588. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6589. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6590. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6591. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  6592. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6593. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6594. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6595. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6596. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  6597. valBuffer^ := VAL_2;
  6598. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6599. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6600. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6601. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6602. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  6603. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6604. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6605. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6606. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6607. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  6608. valBuffer^ := VAL_3;
  6609. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6610. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6611. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6612. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6613. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  6614. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6615. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6616. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6617. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6618. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  6619. end;
  6620. procedure TSDOLongField_Test.getCharacter();
  6621. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6622. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  6623. var
  6624. obj : ISDOField;
  6625. intVal : array[0..100] of Byte;
  6626. buffer, tmpBuffer, attributeBuffer : PByte;
  6627. valBuffer : PSDOLong;
  6628. begin
  6629. FillChar(intVal,SizeOf(intVal),#0);
  6630. buffer := @intVal;
  6631. tmpBuffer := buffer;
  6632. attributeBuffer := buffer;
  6633. Inc(tmpBuffer);
  6634. valBuffer := PSDOLong(tmpBuffer);
  6635. obj := Create_Field();
  6636. valBuffer^ := VAL_1;
  6637. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6638. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6639. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  6640. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6641. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6642. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  6643. valBuffer^ := VAL_2;
  6644. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6645. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6646. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  6647. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6648. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6649. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  6650. valBuffer^ := VAL_3;
  6651. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6652. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6653. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  6654. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6655. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6656. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  6657. FillChar(intVal,SizeOf(intVal),#0);
  6658. Inc(tmpBuffer);
  6659. Inc(attributeBuffer);
  6660. valBuffer := PSDOLong(tmpBuffer);
  6661. valBuffer^ := VAL_1;
  6662. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6663. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6664. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  6665. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6666. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6667. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  6668. valBuffer^ := VAL_2;
  6669. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6670. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6671. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  6672. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6673. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6674. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  6675. valBuffer^ := VAL_3;
  6676. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6677. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6678. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  6679. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6680. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6681. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  6682. end;
  6683. procedure TSDOLongField_Test.getInteger();
  6684. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6685. VAL_1 = 12345678; VAL_2 = -78945612; VAL_3 = 0;
  6686. var
  6687. obj : ISDOField;
  6688. intVal : array[0..100] of Byte;
  6689. buffer, tmpBuffer, attributeBuffer : PByte;
  6690. valBuffer : PSDOLong;
  6691. begin
  6692. FillChar(intVal,SizeOf(intVal),#0);
  6693. buffer := @intVal;
  6694. tmpBuffer := buffer;
  6695. attributeBuffer := buffer;
  6696. Inc(tmpBuffer);
  6697. valBuffer := PSDOLong(tmpBuffer);
  6698. obj := Create_Field();
  6699. valBuffer^ := VAL_1;
  6700. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6701. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6702. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6703. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6704. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  6705. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6706. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6707. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6708. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6709. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  6710. valBuffer^ := VAL_2;
  6711. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6712. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6713. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6714. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6715. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  6716. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6717. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6718. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6719. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6720. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  6721. valBuffer^ := VAL_3;
  6722. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6723. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6724. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6725. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6726. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  6727. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6728. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6729. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6730. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6731. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  6732. FillChar(intVal,SizeOf(intVal),#0);
  6733. Inc(tmpBuffer);
  6734. Inc(attributeBuffer);
  6735. valBuffer := PSDOLong(tmpBuffer);
  6736. valBuffer^ := VAL_1;
  6737. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6738. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6739. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6740. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6741. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  6742. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6743. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6744. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6745. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6746. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  6747. valBuffer^ := VAL_2;
  6748. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6749. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6750. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6751. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6752. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  6753. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6754. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6755. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6756. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6757. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  6758. valBuffer^ := VAL_3;
  6759. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6760. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6761. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6762. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6763. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  6764. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6765. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6766. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6767. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6768. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  6769. end;
  6770. procedure TSDOLongField_Test.getLong();
  6771. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6772. VAL_1 = 1234586791234567; VAL_2 = -98765532166547; VAL_3 = 0;
  6773. var
  6774. obj : ISDOField;
  6775. intVal : array[0..100] of Byte;
  6776. buffer, tmpBuffer, attributeBuffer : PByte;
  6777. valBuffer : PSDOLong;
  6778. begin
  6779. FillChar(intVal,SizeOf(intVal),#0);
  6780. buffer := @intVal;
  6781. tmpBuffer := buffer;
  6782. attributeBuffer := buffer;
  6783. Inc(tmpBuffer);
  6784. valBuffer := PSDOLong(tmpBuffer);
  6785. obj := Create_Field();
  6786. valBuffer^ := VAL_1;
  6787. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6788. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6789. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6790. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6791. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  6792. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6793. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6794. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6795. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6796. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  6797. valBuffer^ := VAL_2;
  6798. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6799. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6800. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6801. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6802. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  6803. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6804. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6805. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6806. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6807. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  6808. valBuffer^ := VAL_3;
  6809. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6810. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6811. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6812. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6813. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  6814. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6815. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6816. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6817. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6818. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  6819. FillChar(intVal,SizeOf(intVal),#0);
  6820. Inc(tmpBuffer);
  6821. Inc(attributeBuffer);
  6822. valBuffer := PSDOLong(tmpBuffer);
  6823. valBuffer^ := VAL_1;
  6824. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6825. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6826. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6827. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6828. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  6829. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6830. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6831. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6832. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6833. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  6834. valBuffer^ := VAL_2;
  6835. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6836. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6837. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6838. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6839. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  6840. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6841. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6842. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6843. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6844. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  6845. valBuffer^ := VAL_3;
  6846. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6847. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6848. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6849. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6850. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  6851. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6852. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6853. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6854. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6855. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  6856. end;
  6857. procedure TSDOLongField_Test.getShort();
  6858. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6859. VAL_1 = 1234; VAL_2 = -987; VAL_3 = 0;
  6860. var
  6861. obj : ISDOField;
  6862. intVal : array[0..100] of Byte;
  6863. buffer, tmpBuffer, attributeBuffer : PByte;
  6864. valBuffer : PSDOLong;
  6865. begin
  6866. FillChar(intVal,SizeOf(intVal),#0);
  6867. buffer := @intVal;
  6868. tmpBuffer := buffer;
  6869. attributeBuffer := buffer;
  6870. Inc(tmpBuffer);
  6871. valBuffer := PSDOLong(tmpBuffer);
  6872. obj := Create_Field();
  6873. valBuffer^ := VAL_1;
  6874. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6875. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6876. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6877. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6878. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  6879. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6880. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6881. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6882. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6883. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  6884. valBuffer^ := VAL_2;
  6885. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6886. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6887. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6888. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6889. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  6890. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6891. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6892. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6893. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6894. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  6895. valBuffer^ := VAL_3;
  6896. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6897. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6898. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6899. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6900. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  6901. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6902. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6903. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6904. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6905. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  6906. FillChar(intVal,SizeOf(intVal),#0);
  6907. Inc(tmpBuffer);
  6908. Inc(attributeBuffer);
  6909. valBuffer := PSDOLong(tmpBuffer);
  6910. valBuffer^ := VAL_1;
  6911. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6912. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6913. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6914. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6915. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  6916. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6917. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6918. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6919. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6920. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  6921. valBuffer^ := VAL_2;
  6922. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6923. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6924. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6925. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6926. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  6927. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6928. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6929. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6930. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6931. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  6932. valBuffer^ := VAL_3;
  6933. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6934. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6935. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6936. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6937. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  6938. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6939. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6940. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6941. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6942. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  6943. end;
  6944. procedure TSDOLongField_Test.getString();
  6945. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6946. VAL_1 = 123456789123456; VAL_2 = -9876543211234; VAL_3 = 0;
  6947. var
  6948. obj : ISDOField;
  6949. intVal : array[0..100] of Byte;
  6950. buffer, tmpBuffer, attributeBuffer : PByte;
  6951. valBuffer : PSDOLong;
  6952. begin
  6953. FillChar(intVal,SizeOf(intVal),#0);
  6954. buffer := @intVal;
  6955. tmpBuffer := buffer;
  6956. attributeBuffer := buffer;
  6957. Inc(tmpBuffer);
  6958. valBuffer := PSDOLong(tmpBuffer);
  6959. obj := Create_Field();
  6960. valBuffer^ := VAL_1;
  6961. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6962. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6963. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  6964. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6965. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6966. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  6967. valBuffer^ := VAL_2;
  6968. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6969. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6970. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  6971. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6972. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6973. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  6974. valBuffer^ := VAL_3;
  6975. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6976. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6977. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  6978. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6979. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6980. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  6981. FillChar(intVal,SizeOf(intVal),#0);
  6982. Inc(tmpBuffer);
  6983. Inc(attributeBuffer);
  6984. valBuffer := PSDOLong(tmpBuffer);
  6985. valBuffer^ := VAL_1;
  6986. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6987. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6988. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  6989. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6990. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6991. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  6992. valBuffer^ := VAL_2;
  6993. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6994. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6995. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  6996. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6997. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6998. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  6999. valBuffer^ := VAL_3;
  7000. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7001. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7002. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  7003. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7004. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7005. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  7006. end;
  7007. procedure TSDOLongField_Test.setBoolean();
  7008. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7009. var
  7010. obj : ISDOField;
  7011. intVal : array[0..100] of Byte;
  7012. buffer, tmpBuffer, attributeBuffer : PByte;
  7013. valBuffer : PSDOLong;
  7014. begin
  7015. FillChar(intVal,SizeOf(intVal),#0);
  7016. buffer := @intVal;
  7017. tmpBuffer := buffer;
  7018. attributeBuffer := buffer;
  7019. Inc(tmpBuffer);
  7020. valBuffer := PSDOLong(tmpBuffer);
  7021. obj := Create_Field();
  7022. obj.setBoolean(buffer,F_OFFSET_0,True);
  7023. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7024. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7025. CheckEquals(1,valBuffer^);
  7026. obj.setBoolean(buffer,F_OFFSET_0,False);
  7027. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7028. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7029. CheckEquals(0,valBuffer^);
  7030. FillChar(intVal,SizeOf(intVal),#0);
  7031. Inc(tmpBuffer);
  7032. Inc(attributeBuffer);
  7033. valBuffer := PSDOLong(tmpBuffer);
  7034. obj.setBoolean(buffer,F_OFFSET_1,True);
  7035. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7036. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7037. CheckEquals(1,valBuffer^);
  7038. obj.setBoolean(buffer,F_OFFSET_1,False);
  7039. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7040. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7041. CheckEquals(0,valBuffer^);
  7042. end;
  7043. procedure TSDOLongField_Test.setByte();
  7044. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7045. VAL_1 = 12; VAL_2 = 123; VAL_3 = 0;
  7046. var
  7047. obj : ISDOField;
  7048. intVal : array[0..100] of Byte;
  7049. buffer, tmpBuffer, attributeBuffer : PByte;
  7050. valBuffer : PSDOLong;
  7051. begin
  7052. FillChar(intVal,SizeOf(intVal),#0);
  7053. buffer := @intVal;
  7054. tmpBuffer := buffer;
  7055. attributeBuffer := buffer;
  7056. Inc(tmpBuffer);
  7057. valBuffer := PSDOLong(tmpBuffer);
  7058. obj := Create_Field();
  7059. obj.setByte(buffer,F_OFFSET_0,VAL_1);
  7060. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7061. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7062. CheckEquals(VAL_1,valBuffer^);
  7063. obj.setByte(buffer,F_OFFSET_0,VAL_2);
  7064. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7065. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7066. CheckEquals(VAL_2,valBuffer^);
  7067. obj.setByte(buffer,F_OFFSET_0,VAL_3);
  7068. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7069. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7070. CheckEquals(VAL_3,valBuffer^);
  7071. FillChar(intVal,SizeOf(intVal),#0);
  7072. Inc(tmpBuffer);
  7073. Inc(attributeBuffer);
  7074. valBuffer := PSDOLong(tmpBuffer);
  7075. obj.setByte(buffer,F_OFFSET_1,VAL_1);
  7076. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7077. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7078. CheckEquals(VAL_1,valBuffer^);
  7079. obj.setByte(buffer,F_OFFSET_1,VAL_2);
  7080. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7081. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7082. CheckEquals(VAL_2,valBuffer^);
  7083. obj.setByte(buffer,F_OFFSET_1,VAL_3);
  7084. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7085. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7086. CheckEquals(VAL_3,valBuffer^);
  7087. end;
  7088. procedure TSDOLongField_Test.setCharacter();
  7089. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7090. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  7091. var
  7092. obj : ISDOField;
  7093. intVal : array[0..100] of Byte;
  7094. buffer, tmpBuffer, attributeBuffer : PByte;
  7095. valBuffer : PSDOLong;
  7096. begin
  7097. FillChar(intVal,SizeOf(intVal),#0);
  7098. buffer := @intVal;
  7099. tmpBuffer := buffer;
  7100. attributeBuffer := buffer;
  7101. Inc(tmpBuffer);
  7102. valBuffer := PSDOLong(tmpBuffer);
  7103. obj := Create_Field();
  7104. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_1));
  7105. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7106. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7107. CheckEquals(VAL_1,valBuffer^);
  7108. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_2));
  7109. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7110. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7111. CheckEquals(VAL_2,valBuffer^);
  7112. FillChar(intVal,SizeOf(intVal),#0);
  7113. Inc(tmpBuffer);
  7114. Inc(attributeBuffer);
  7115. valBuffer := PSDOLong(tmpBuffer);
  7116. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_1));
  7117. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7118. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7119. CheckEquals(VAL_1,valBuffer^);
  7120. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_2));
  7121. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7122. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7123. CheckEquals(VAL_2,valBuffer^);
  7124. end;
  7125. procedure TSDOLongField_Test.setInteger();
  7126. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7127. VAL_1 = 12345678; VAL_2 = -98765432; VAL_3 = 0;
  7128. var
  7129. obj : ISDOField;
  7130. intVal : array[0..100] of Byte;
  7131. buffer, tmpBuffer, attributeBuffer : PByte;
  7132. valBuffer : PSDOLong;
  7133. begin
  7134. FillChar(intVal,SizeOf(intVal),#0);
  7135. buffer := @intVal;
  7136. tmpBuffer := buffer;
  7137. attributeBuffer := buffer;
  7138. Inc(tmpBuffer);
  7139. valBuffer := PSDOLong(tmpBuffer);
  7140. obj := Create_Field();
  7141. obj.setInteger(buffer,F_OFFSET_0,VAL_1);
  7142. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7143. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7144. CheckEquals(VAL_1,valBuffer^);
  7145. obj.setInteger(buffer,F_OFFSET_0,VAL_2);
  7146. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7147. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7148. CheckEquals(VAL_2,valBuffer^);
  7149. obj.setInteger(buffer,F_OFFSET_0,VAL_3);
  7150. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7151. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7152. CheckEquals(VAL_3,valBuffer^);
  7153. FillChar(intVal,SizeOf(intVal),#0);
  7154. Inc(tmpBuffer);
  7155. Inc(attributeBuffer);
  7156. valBuffer := PSDOLong(tmpBuffer);
  7157. obj.setInteger(buffer,F_OFFSET_1,VAL_1);
  7158. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7159. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7160. CheckEquals(VAL_1,valBuffer^);
  7161. obj.setInteger(buffer,F_OFFSET_1,VAL_2);
  7162. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7163. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7164. CheckEquals(VAL_2,valBuffer^);
  7165. obj.setInteger(buffer,F_OFFSET_1,VAL_3);
  7166. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7167. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7168. CheckEquals(VAL_3,valBuffer^);
  7169. end;
  7170. procedure TSDOLongField_Test.setLong();
  7171. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7172. VAL_1 = 1234586791234567; VAL_2 = -98765532166547; VAL_3 = 0;
  7173. var
  7174. obj : ISDOField;
  7175. intVal : array[0..100] of Byte;
  7176. buffer, tmpBuffer, attributeBuffer : PByte;
  7177. valBuffer : PSDOLong;
  7178. begin
  7179. FillChar(intVal,SizeOf(intVal),#0);
  7180. buffer := @intVal;
  7181. tmpBuffer := buffer;
  7182. attributeBuffer := buffer;
  7183. Inc(tmpBuffer);
  7184. valBuffer := PSDOLong(tmpBuffer);
  7185. obj := Create_Field();
  7186. obj.setLong(buffer,F_OFFSET_0,VAL_1);
  7187. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7188. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7189. CheckEquals(VAL_1,valBuffer^);
  7190. obj.setLong(buffer,F_OFFSET_0,VAL_2);
  7191. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7192. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7193. CheckEquals(VAL_2,valBuffer^);
  7194. obj.setLong(buffer,F_OFFSET_0,VAL_3);
  7195. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7196. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7197. CheckEquals(VAL_3,valBuffer^);
  7198. FillChar(intVal,SizeOf(intVal),#0);
  7199. Inc(tmpBuffer);
  7200. Inc(attributeBuffer);
  7201. valBuffer := PSDOLong(tmpBuffer);
  7202. obj.setLong(buffer,F_OFFSET_1,VAL_1);
  7203. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7204. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7205. CheckEquals(VAL_1,valBuffer^);
  7206. obj.setLong(buffer,F_OFFSET_1,VAL_2);
  7207. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7208. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7209. CheckEquals(VAL_2,valBuffer^);
  7210. obj.setLong(buffer,F_OFFSET_1,VAL_3);
  7211. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7212. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7213. CheckEquals(VAL_3,valBuffer^);
  7214. end;
  7215. procedure TSDOLongField_Test.setShort();
  7216. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7217. VAL_1 = 123; VAL_2 = -9876; VAL_3 = 0;
  7218. var
  7219. obj : ISDOField;
  7220. intVal : array[0..100] of Byte;
  7221. buffer, tmpBuffer, attributeBuffer : PByte;
  7222. valBuffer : PSDOLong;
  7223. begin
  7224. FillChar(intVal,SizeOf(intVal),#0);
  7225. buffer := @intVal;
  7226. tmpBuffer := buffer;
  7227. attributeBuffer := buffer;
  7228. Inc(tmpBuffer);
  7229. valBuffer := PSDOLong(tmpBuffer);
  7230. obj := Create_Field();
  7231. obj.setShort(buffer,F_OFFSET_0,VAL_1);
  7232. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7233. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7234. CheckEquals(VAL_1,valBuffer^);
  7235. obj.setShort(buffer,F_OFFSET_0,VAL_2);
  7236. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7237. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7238. CheckEquals(VAL_2,valBuffer^);
  7239. obj.setShort(buffer,F_OFFSET_0,VAL_3);
  7240. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7241. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7242. CheckEquals(VAL_3,valBuffer^);
  7243. FillChar(intVal,SizeOf(intVal),#0);
  7244. Inc(tmpBuffer);
  7245. Inc(attributeBuffer);
  7246. valBuffer := PSDOLong(tmpBuffer);
  7247. obj.setShort(buffer,F_OFFSET_1,VAL_1);
  7248. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7249. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7250. CheckEquals(VAL_1,valBuffer^);
  7251. obj.setShort(buffer,F_OFFSET_1,VAL_2);
  7252. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7253. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7254. CheckEquals(VAL_2,valBuffer^);
  7255. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  7256. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7257. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7258. CheckEquals(VAL_3,valBuffer^);
  7259. end;
  7260. procedure TSDOLongField_Test.setString();
  7261. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7262. VAL_1 = 12345678912345; VAL_2 = -987654321654321; VAL_3 = 0;
  7263. var
  7264. obj : ISDOField;
  7265. intVal : array[0..100] of Byte;
  7266. buffer, tmpBuffer, attributeBuffer : PByte;
  7267. valBuffer : PSDOLong;
  7268. begin
  7269. FillChar(intVal,SizeOf(intVal),#0);
  7270. buffer := @intVal;
  7271. tmpBuffer := buffer;
  7272. attributeBuffer := buffer;
  7273. Inc(tmpBuffer);
  7274. valBuffer := PSDOLong(tmpBuffer);
  7275. obj := Create_Field();
  7276. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_1));
  7277. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7278. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7279. CheckEquals(VAL_1,valBuffer^);
  7280. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_2));
  7281. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7282. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7283. CheckEquals(VAL_2,valBuffer^);
  7284. FillChar(intVal,SizeOf(intVal),#0);
  7285. Inc(tmpBuffer);
  7286. Inc(attributeBuffer);
  7287. valBuffer := PSDOLong(tmpBuffer);
  7288. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_1));
  7289. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7290. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7291. CheckEquals(VAL_1,valBuffer^);
  7292. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_2));
  7293. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7294. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7295. CheckEquals(VAL_2,valBuffer^);
  7296. end;
  7297. procedure TSDOLongField_Test.getVariant();
  7298. const
  7299. F_OFFSET = 0;
  7300. SAMPLE_VALUES : array[0..5] of TSDOLong = (-987654321654321,-678,0,1,12,12345678912345);
  7301. var
  7302. obj : ISDOField;
  7303. intVal : array[0..100] of Byte;
  7304. buffer : PByte;
  7305. v : Variant;
  7306. i : Integer;
  7307. a : TSDOLong;
  7308. begin
  7309. FillChar(intVal,SizeOf(intVal),#0);
  7310. buffer := @intVal;
  7311. obj := Create_Field();
  7312. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  7313. obj.setLong(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  7314. v := obj.getVariant(buffer,F_OFFSET);
  7315. a := v;
  7316. CheckEquals(SAMPLE_VALUES[i],a);
  7317. end;
  7318. end;
  7319. procedure TSDOLongField_Test.setVariant();
  7320. const
  7321. F_OFFSET = 0;
  7322. SAMPLE_VALUES : array[0..5] of TSDOLong = (-987654321654321,-678,0,1,12,12345678912345);
  7323. var
  7324. obj : ISDOField;
  7325. intVal : array[0..100] of Byte;
  7326. buffer : PByte;
  7327. v : Variant;
  7328. i : Integer;
  7329. begin
  7330. FillChar(intVal,SizeOf(intVal),#0);
  7331. buffer := @intVal;
  7332. obj := Create_Field();
  7333. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  7334. obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  7335. CheckEquals(SAMPLE_VALUES[i],obj.getLong(buffer,F_OFFSET));
  7336. end;
  7337. end;
  7338. {$ENDIF HAS_SDO_LONG}
  7339. {$IFDEF HAS_SDO_SHORT}
  7340. { TSDOShortField_Test }
  7341. function TSDOShortField_Test.Create_Field() : ISDOField;
  7342. begin
  7343. Result := TSDOShortField.Create() as ISDOField;
  7344. end;
  7345. procedure TSDOShortField_Test.getBoolean();
  7346. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7347. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  7348. var
  7349. obj : ISDOField;
  7350. intVal : array[0..100] of Byte;
  7351. buffer, tmpBuffer, attributeBuffer : PByte;
  7352. valBuffer : PSDOShort;
  7353. begin
  7354. FillChar(intVal,SizeOf(intVal),#0);
  7355. buffer := @intVal;
  7356. tmpBuffer := buffer;
  7357. attributeBuffer := buffer;
  7358. Inc(tmpBuffer);
  7359. valBuffer := PSDOShort(tmpBuffer);
  7360. obj := Create_Field();
  7361. valBuffer^ := VAL_1;
  7362. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7363. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7364. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  7365. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7366. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7367. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  7368. valBuffer^ := VAL_2;
  7369. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7370. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7371. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  7372. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7373. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7374. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  7375. valBuffer^ := VAL_3;
  7376. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7377. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7378. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  7379. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7380. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7381. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  7382. FillChar(intVal,SizeOf(intVal),#0);
  7383. Inc(tmpBuffer);
  7384. Inc(attributeBuffer);
  7385. valBuffer := PSDOShort(tmpBuffer);
  7386. valBuffer^ := VAL_1;
  7387. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7388. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7389. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  7390. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7391. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7392. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  7393. valBuffer^ := VAL_2;
  7394. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7395. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7396. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  7397. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7398. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7399. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  7400. valBuffer^ := VAL_3;
  7401. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7402. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7403. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  7404. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7405. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7406. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  7407. end;
  7408. procedure TSDOShortField_Test.getByte();
  7409. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7410. VAL_1 = 12; VAL_2 = 123; VAL_3 = 0;
  7411. var
  7412. obj : ISDOField;
  7413. intVal : array[0..100] of Byte;
  7414. buffer, tmpBuffer, attributeBuffer : PByte;
  7415. valBuffer : PSDOShort;
  7416. begin
  7417. FillChar(intVal,SizeOf(intVal),#0);
  7418. buffer := @intVal;
  7419. tmpBuffer := buffer;
  7420. attributeBuffer := buffer;
  7421. Inc(tmpBuffer);
  7422. valBuffer := PSDOShort(tmpBuffer);
  7423. obj := Create_Field();
  7424. valBuffer^ := VAL_1;
  7425. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7426. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7427. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7428. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7429. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  7430. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7431. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7432. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7433. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7434. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  7435. valBuffer^ := VAL_2;
  7436. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7437. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7438. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7439. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7440. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  7441. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7442. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7443. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7444. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7445. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  7446. valBuffer^ := VAL_3;
  7447. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7448. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7449. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7450. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7451. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  7452. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7453. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7454. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7455. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7456. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  7457. FillChar(intVal,SizeOf(intVal),#0);
  7458. Inc(tmpBuffer);
  7459. Inc(attributeBuffer);
  7460. valBuffer := PSDOShort(tmpBuffer);
  7461. valBuffer^ := VAL_1;
  7462. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7463. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7464. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7465. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7466. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  7467. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7468. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7469. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7470. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7471. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  7472. valBuffer^ := VAL_2;
  7473. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7474. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7475. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7476. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7477. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  7478. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7479. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7480. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7481. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7482. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  7483. valBuffer^ := VAL_3;
  7484. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7485. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7486. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7487. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7488. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  7489. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7490. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7491. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7492. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7493. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  7494. end;
  7495. procedure TSDOShortField_Test.getCharacter();
  7496. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7497. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  7498. var
  7499. obj : ISDOField;
  7500. intVal : array[0..100] of Byte;
  7501. buffer, tmpBuffer, attributeBuffer : PByte;
  7502. valBuffer : PSDOShort;
  7503. begin
  7504. FillChar(intVal,SizeOf(intVal),#0);
  7505. buffer := @intVal;
  7506. tmpBuffer := buffer;
  7507. attributeBuffer := buffer;
  7508. Inc(tmpBuffer);
  7509. valBuffer := PSDOShort(tmpBuffer);
  7510. obj := Create_Field();
  7511. valBuffer^ := VAL_1;
  7512. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7513. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7514. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  7515. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7516. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7517. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  7518. valBuffer^ := VAL_2;
  7519. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7520. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7521. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  7522. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7523. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7524. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  7525. valBuffer^ := VAL_3;
  7526. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7527. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7528. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  7529. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7530. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7531. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  7532. FillChar(intVal,SizeOf(intVal),#0);
  7533. Inc(tmpBuffer);
  7534. Inc(attributeBuffer);
  7535. valBuffer := PSDOShort(tmpBuffer);
  7536. valBuffer^ := VAL_1;
  7537. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7538. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7539. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  7540. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7541. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7542. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  7543. valBuffer^ := VAL_2;
  7544. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7545. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7546. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  7547. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7548. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7549. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  7550. valBuffer^ := VAL_3;
  7551. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7552. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7553. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  7554. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7555. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7556. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  7557. end;
  7558. procedure TSDOShortField_Test.getInteger();
  7559. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7560. VAL_1 = 1234; VAL_2 = -7894; VAL_3 = 0;
  7561. var
  7562. obj : ISDOField;
  7563. intVal : array[0..100] of Byte;
  7564. buffer, tmpBuffer, attributeBuffer : PByte;
  7565. valBuffer : PSDOShort;
  7566. begin
  7567. FillChar(intVal,SizeOf(intVal),#0);
  7568. buffer := @intVal;
  7569. tmpBuffer := buffer;
  7570. attributeBuffer := buffer;
  7571. Inc(tmpBuffer);
  7572. valBuffer := PSDOShort(tmpBuffer);
  7573. obj := Create_Field();
  7574. valBuffer^ := VAL_1;
  7575. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7576. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7577. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7578. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7579. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  7580. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7581. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7582. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7583. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7584. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  7585. valBuffer^ := VAL_2;
  7586. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7587. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7588. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7589. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7590. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  7591. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7592. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7593. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7594. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7595. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  7596. valBuffer^ := VAL_3;
  7597. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7598. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7599. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7600. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7601. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  7602. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7603. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7604. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7605. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7606. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  7607. FillChar(intVal,SizeOf(intVal),#0);
  7608. Inc(tmpBuffer);
  7609. Inc(attributeBuffer);
  7610. valBuffer := PSDOShort(tmpBuffer);
  7611. valBuffer^ := VAL_1;
  7612. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7613. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7614. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7615. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7616. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  7617. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7618. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7619. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7620. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7621. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  7622. valBuffer^ := VAL_2;
  7623. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7624. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7625. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7626. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7627. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  7628. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7629. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7630. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7631. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7632. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  7633. valBuffer^ := VAL_3;
  7634. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7635. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7636. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7637. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7638. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  7639. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7640. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7641. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7642. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7643. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  7644. end;
  7645. procedure TSDOShortField_Test.getLong();
  7646. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7647. VAL_1 = 1234; VAL_2 = -987; VAL_3 = 0;
  7648. var
  7649. obj : ISDOField;
  7650. intVal : array[0..100] of Byte;
  7651. buffer, tmpBuffer, attributeBuffer : PByte;
  7652. valBuffer : PSDOLong;
  7653. begin
  7654. FillChar(intVal,SizeOf(intVal),#0);
  7655. buffer := @intVal;
  7656. tmpBuffer := buffer;
  7657. attributeBuffer := buffer;
  7658. Inc(tmpBuffer);
  7659. valBuffer := PSDOLong(tmpBuffer);
  7660. obj := Create_Field();
  7661. valBuffer^ := VAL_1;
  7662. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7663. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7664. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7665. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7666. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  7667. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7668. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7669. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7670. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7671. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  7672. valBuffer^ := VAL_2;
  7673. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7674. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7675. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7676. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7677. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  7678. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7679. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7680. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7681. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7682. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  7683. valBuffer^ := VAL_3;
  7684. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7685. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7686. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7687. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7688. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  7689. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7690. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7691. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7692. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7693. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  7694. FillChar(intVal,SizeOf(intVal),#0);
  7695. Inc(tmpBuffer);
  7696. Inc(attributeBuffer);
  7697. valBuffer := PSDOLong(tmpBuffer);
  7698. valBuffer^ := VAL_1;
  7699. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7700. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7701. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7702. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7703. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  7704. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7705. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7706. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7707. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7708. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  7709. valBuffer^ := VAL_2;
  7710. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7711. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7712. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7713. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7714. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  7715. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7716. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7717. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7718. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7719. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  7720. valBuffer^ := VAL_3;
  7721. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7722. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7723. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7724. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7725. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  7726. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7727. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7728. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7729. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7730. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  7731. end;
  7732. procedure TSDOShortField_Test.getShort();
  7733. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7734. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  7735. var
  7736. obj : ISDOField;
  7737. intVal : array[0..100] of Byte;
  7738. buffer, tmpBuffer, attributeBuffer : PByte;
  7739. valBuffer : PSDOShort;
  7740. begin
  7741. FillChar(intVal,SizeOf(intVal),#0);
  7742. buffer := @intVal;
  7743. tmpBuffer := buffer;
  7744. attributeBuffer := buffer;
  7745. Inc(tmpBuffer);
  7746. valBuffer := PSDOShort(tmpBuffer);
  7747. obj := Create_Field();
  7748. valBuffer^ := VAL_1;
  7749. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7750. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7751. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7752. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7753. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  7754. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7755. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7756. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7757. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7758. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  7759. valBuffer^ := VAL_2;
  7760. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7761. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7762. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7763. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7764. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  7765. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7766. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7767. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7768. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7769. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  7770. valBuffer^ := VAL_3;
  7771. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7772. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7773. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7774. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7775. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  7776. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7777. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7778. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7779. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7780. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  7781. FillChar(intVal,SizeOf(intVal),#0);
  7782. Inc(tmpBuffer);
  7783. Inc(attributeBuffer);
  7784. valBuffer := PSDOShort(tmpBuffer);
  7785. valBuffer^ := VAL_1;
  7786. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7787. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7788. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7789. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7790. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  7791. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7792. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7793. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7794. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7795. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  7796. valBuffer^ := VAL_2;
  7797. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7798. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7799. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7800. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7801. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  7802. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7803. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7804. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7805. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7806. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  7807. valBuffer^ := VAL_3;
  7808. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7809. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7810. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7811. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7812. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  7813. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7814. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7815. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7816. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7817. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  7818. end;
  7819. procedure TSDOShortField_Test.getString();
  7820. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7821. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  7822. var
  7823. obj : ISDOField;
  7824. intVal : array[0..100] of Byte;
  7825. buffer, tmpBuffer, attributeBuffer : PByte;
  7826. valBuffer : PSDOShort;
  7827. begin
  7828. FillChar(intVal,SizeOf(intVal),#0);
  7829. buffer := @intVal;
  7830. tmpBuffer := buffer;
  7831. attributeBuffer := buffer;
  7832. Inc(tmpBuffer);
  7833. valBuffer := PSDOShort(tmpBuffer);
  7834. obj := Create_Field();
  7835. valBuffer^ := VAL_1;
  7836. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7837. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7838. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  7839. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7840. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7841. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  7842. valBuffer^ := VAL_2;
  7843. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7844. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7845. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  7846. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7847. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7848. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  7849. valBuffer^ := VAL_3;
  7850. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7851. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7852. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  7853. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7854. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7855. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  7856. FillChar(intVal,SizeOf(intVal),#0);
  7857. Inc(tmpBuffer);
  7858. Inc(attributeBuffer);
  7859. valBuffer := PSDOShort(tmpBuffer);
  7860. valBuffer^ := VAL_1;
  7861. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7862. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7863. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  7864. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7865. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7866. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  7867. valBuffer^ := VAL_2;
  7868. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7869. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7870. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  7871. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7872. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7873. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  7874. valBuffer^ := VAL_3;
  7875. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7876. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7877. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  7878. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7879. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7880. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  7881. end;
  7882. procedure TSDOShortField_Test.setBoolean();
  7883. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7884. var
  7885. obj : ISDOField;
  7886. intVal : array[0..100] of Byte;
  7887. buffer, tmpBuffer, attributeBuffer : PByte;
  7888. valBuffer : PSDOShort;
  7889. begin
  7890. FillChar(intVal,SizeOf(intVal),#0);
  7891. buffer := @intVal;
  7892. tmpBuffer := buffer;
  7893. attributeBuffer := buffer;
  7894. Inc(tmpBuffer);
  7895. valBuffer := PSDOShort(tmpBuffer);
  7896. obj := Create_Field();
  7897. obj.setBoolean(buffer,F_OFFSET_0,True);
  7898. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7899. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7900. CheckEquals(1,valBuffer^);
  7901. obj.setBoolean(buffer,F_OFFSET_0,False);
  7902. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7903. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7904. CheckEquals(0,valBuffer^);
  7905. FillChar(intVal,SizeOf(intVal),#0);
  7906. Inc(tmpBuffer);
  7907. Inc(attributeBuffer);
  7908. valBuffer := PSDOShort(tmpBuffer);
  7909. obj.setBoolean(buffer,F_OFFSET_1,True);
  7910. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7911. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7912. CheckEquals(1,valBuffer^);
  7913. obj.setBoolean(buffer,F_OFFSET_1,False);
  7914. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7915. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7916. CheckEquals(0,valBuffer^);
  7917. end;
  7918. procedure TSDOShortField_Test.setByte();
  7919. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7920. VAL_1 = 12; VAL_2 = 123; VAL_3 = 0;
  7921. var
  7922. obj : ISDOField;
  7923. intVal : array[0..100] of Byte;
  7924. buffer, tmpBuffer, attributeBuffer : PByte;
  7925. valBuffer : PSDOShort;
  7926. begin
  7927. FillChar(intVal,SizeOf(intVal),#0);
  7928. buffer := @intVal;
  7929. tmpBuffer := buffer;
  7930. attributeBuffer := buffer;
  7931. Inc(tmpBuffer);
  7932. valBuffer := PSDOShort(tmpBuffer);
  7933. obj := Create_Field();
  7934. obj.setByte(buffer,F_OFFSET_0,VAL_1);
  7935. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7936. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7937. CheckEquals(VAL_1,valBuffer^);
  7938. obj.setByte(buffer,F_OFFSET_0,VAL_2);
  7939. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7940. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7941. CheckEquals(VAL_2,valBuffer^);
  7942. obj.setByte(buffer,F_OFFSET_0,VAL_3);
  7943. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7944. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7945. CheckEquals(VAL_3,valBuffer^);
  7946. FillChar(intVal,SizeOf(intVal),#0);
  7947. Inc(tmpBuffer);
  7948. Inc(attributeBuffer);
  7949. valBuffer := PSDOShort(tmpBuffer);
  7950. obj.setByte(buffer,F_OFFSET_1,VAL_1);
  7951. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7952. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7953. CheckEquals(VAL_1,valBuffer^);
  7954. obj.setByte(buffer,F_OFFSET_1,VAL_2);
  7955. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7956. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7957. CheckEquals(VAL_2,valBuffer^);
  7958. obj.setByte(buffer,F_OFFSET_1,VAL_3);
  7959. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7960. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7961. CheckEquals(VAL_3,valBuffer^);
  7962. end;
  7963. procedure TSDOShortField_Test.setCharacter();
  7964. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7965. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  7966. var
  7967. obj : ISDOField;
  7968. intVal : array[0..100] of Byte;
  7969. buffer, tmpBuffer, attributeBuffer : PByte;
  7970. valBuffer : PSDOShort;
  7971. begin
  7972. FillChar(intVal,SizeOf(intVal),#0);
  7973. buffer := @intVal;
  7974. tmpBuffer := buffer;
  7975. attributeBuffer := buffer;
  7976. Inc(tmpBuffer);
  7977. valBuffer := PSDOShort(tmpBuffer);
  7978. obj := Create_Field();
  7979. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_1));
  7980. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7981. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7982. CheckEquals(VAL_1,valBuffer^);
  7983. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_2));
  7984. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7985. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7986. CheckEquals(VAL_2,valBuffer^);
  7987. FillChar(intVal,SizeOf(intVal),#0);
  7988. Inc(tmpBuffer);
  7989. Inc(attributeBuffer);
  7990. valBuffer := PSDOShort(tmpBuffer);
  7991. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_1));
  7992. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7993. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7994. CheckEquals(VAL_1,valBuffer^);
  7995. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_2));
  7996. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7997. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7998. CheckEquals(VAL_2,valBuffer^);
  7999. end;
  8000. procedure TSDOShortField_Test.setInteger();
  8001. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8002. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  8003. var
  8004. obj : ISDOField;
  8005. intVal : array[0..100] of Byte;
  8006. buffer, tmpBuffer, attributeBuffer : PByte;
  8007. valBuffer : PSDOShort;
  8008. begin
  8009. FillChar(intVal,SizeOf(intVal),#0);
  8010. buffer := @intVal;
  8011. tmpBuffer := buffer;
  8012. attributeBuffer := buffer;
  8013. Inc(tmpBuffer);
  8014. valBuffer := PSDOShort(tmpBuffer);
  8015. obj := Create_Field();
  8016. obj.setInteger(buffer,F_OFFSET_0,VAL_1);
  8017. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8018. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8019. CheckEquals(VAL_1,valBuffer^);
  8020. obj.setInteger(buffer,F_OFFSET_0,VAL_2);
  8021. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8022. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8023. CheckEquals(VAL_2,valBuffer^);
  8024. obj.setInteger(buffer,F_OFFSET_0,VAL_3);
  8025. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8026. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8027. CheckEquals(VAL_3,valBuffer^);
  8028. FillChar(intVal,SizeOf(intVal),#0);
  8029. Inc(tmpBuffer);
  8030. Inc(attributeBuffer);
  8031. valBuffer := PSDOShort(tmpBuffer);
  8032. obj.setInteger(buffer,F_OFFSET_1,VAL_1);
  8033. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8034. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8035. CheckEquals(VAL_1,valBuffer^);
  8036. obj.setInteger(buffer,F_OFFSET_1,VAL_2);
  8037. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8038. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8039. CheckEquals(VAL_2,valBuffer^);
  8040. obj.setInteger(buffer,F_OFFSET_1,VAL_3);
  8041. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8042. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8043. CheckEquals(VAL_3,valBuffer^);
  8044. end;
  8045. procedure TSDOShortField_Test.setLong();
  8046. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8047. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  8048. var
  8049. obj : ISDOField;
  8050. intVal : array[0..100] of Byte;
  8051. buffer, tmpBuffer, attributeBuffer : PByte;
  8052. valBuffer : PSDOShort;
  8053. begin
  8054. FillChar(intVal,SizeOf(intVal),#0);
  8055. buffer := @intVal;
  8056. tmpBuffer := buffer;
  8057. attributeBuffer := buffer;
  8058. Inc(tmpBuffer);
  8059. valBuffer := PSDOShort(tmpBuffer);
  8060. obj := Create_Field();
  8061. obj.setLong(buffer,F_OFFSET_0,VAL_1);
  8062. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8063. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8064. CheckEquals(VAL_1,valBuffer^);
  8065. obj.setLong(buffer,F_OFFSET_0,VAL_2);
  8066. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8067. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8068. CheckEquals(VAL_2,valBuffer^);
  8069. obj.setLong(buffer,F_OFFSET_0,VAL_3);
  8070. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8071. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8072. CheckEquals(VAL_3,valBuffer^);
  8073. FillChar(intVal,SizeOf(intVal),#0);
  8074. Inc(tmpBuffer);
  8075. Inc(attributeBuffer);
  8076. valBuffer := PSDOShort(tmpBuffer);
  8077. obj.setLong(buffer,F_OFFSET_1,VAL_1);
  8078. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8079. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8080. CheckEquals(VAL_1,valBuffer^);
  8081. obj.setLong(buffer,F_OFFSET_1,VAL_2);
  8082. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8083. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8084. CheckEquals(VAL_2,valBuffer^);
  8085. obj.setLong(buffer,F_OFFSET_1,VAL_3);
  8086. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8087. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8088. CheckEquals(VAL_3,valBuffer^);
  8089. end;
  8090. procedure TSDOShortField_Test.setShort();
  8091. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8092. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  8093. var
  8094. obj : ISDOField;
  8095. intVal : QWord;
  8096. buffer, tmpBuffer, attributeBuffer : PByte;
  8097. valBuffer : PSDOShort;
  8098. begin
  8099. FillChar(intVal,SizeOf(intVal),#0);
  8100. buffer := @intVal;
  8101. tmpBuffer := buffer;
  8102. attributeBuffer := buffer;
  8103. Inc(tmpBuffer);
  8104. valBuffer := PSDOShort(tmpBuffer);
  8105. obj := Create_Field();
  8106. obj.setShort(buffer,F_OFFSET_0,VAL_1);
  8107. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8108. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8109. CheckEquals(VAL_1,valBuffer^);
  8110. obj.setShort(buffer,F_OFFSET_0,VAL_2);
  8111. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8112. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8113. CheckEquals(VAL_2,valBuffer^);
  8114. obj.setShort(buffer,F_OFFSET_0,VAL_3);
  8115. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8116. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8117. CheckEquals(VAL_3,valBuffer^);
  8118. FillChar(intVal,SizeOf(intVal),#0);
  8119. Inc(tmpBuffer);
  8120. Inc(attributeBuffer);
  8121. valBuffer := PSDOShort(tmpBuffer);
  8122. obj.setShort(buffer,F_OFFSET_1,VAL_1);
  8123. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8124. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8125. CheckEquals(VAL_1,valBuffer^);
  8126. obj.setShort(buffer,F_OFFSET_1,VAL_2);
  8127. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8128. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8129. CheckEquals(VAL_2,valBuffer^);
  8130. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  8131. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8132. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8133. CheckEquals(VAL_3,valBuffer^);
  8134. end;
  8135. procedure TSDOShortField_Test.setString();
  8136. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8137. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  8138. var
  8139. obj : ISDOField;
  8140. intVal : array[0..100] of Byte;
  8141. buffer, tmpBuffer, attributeBuffer : PByte;
  8142. valBuffer : PSDOShort;
  8143. begin
  8144. FillChar(intVal,SizeOf(intVal),#0);
  8145. buffer := @intVal;
  8146. tmpBuffer := buffer;
  8147. attributeBuffer := buffer;
  8148. Inc(tmpBuffer);
  8149. valBuffer := PSDOShort(tmpBuffer);
  8150. obj := Create_Field();
  8151. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_1));
  8152. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8153. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8154. CheckEquals(VAL_1,valBuffer^);
  8155. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_2));
  8156. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8157. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8158. CheckEquals(VAL_2,valBuffer^);
  8159. FillChar(intVal,SizeOf(intVal),#0);
  8160. Inc(tmpBuffer);
  8161. Inc(attributeBuffer);
  8162. valBuffer := PSDOShort(tmpBuffer);
  8163. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_1));
  8164. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8165. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8166. CheckEquals(VAL_1,valBuffer^);
  8167. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_2));
  8168. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8169. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8170. CheckEquals(VAL_2,valBuffer^);
  8171. end;
  8172. procedure TSDOShortField_Test.getVariant();
  8173. const
  8174. F_OFFSET = 0;
  8175. SAMPLE_VALUES : array[0..5] of TSDOShort = (-9865,-678,0,1,12,4567);
  8176. var
  8177. obj : ISDOField;
  8178. intVal : QWord;
  8179. buffer : PByte;
  8180. v : Variant;
  8181. i : Integer;
  8182. a : TSDOShort;
  8183. begin
  8184. intVal := 0;
  8185. buffer := @intVal;
  8186. obj := Create_Field();
  8187. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  8188. obj.setShort(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  8189. v := obj.getVariant(buffer,F_OFFSET);
  8190. a := v;
  8191. CheckEquals(SAMPLE_VALUES[i],a);
  8192. end;
  8193. end;
  8194. procedure TSDOShortField_Test.setVariant();
  8195. const
  8196. F_OFFSET = 0;
  8197. SAMPLE_VALUES : array[0..5] of TSDOShort = (-9865,-678,0,1,12,4567);
  8198. var
  8199. obj : ISDOField;
  8200. intVal : QWord;
  8201. buffer : PByte;
  8202. v : Variant;
  8203. i : Integer;
  8204. begin
  8205. intVal := 0;
  8206. buffer := @intVal;
  8207. obj := Create_Field();
  8208. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  8209. obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  8210. CheckEquals(SAMPLE_VALUES[i],obj.getShort(buffer,F_OFFSET));
  8211. end;
  8212. end;
  8213. {$ENDIF HAS_SDO_SHORT}
  8214. {$IFDEF HAS_SDO_BYTES}
  8215. { TSDOBytesField_Test }
  8216. class procedure TSDOBytesField_Test.CleanUpBuffer(var ABuffer: PPSDOBytes);
  8217. begin
  8218. if ( ABuffer <> nil ) then begin
  8219. ABuffer^^ := nil;
  8220. FreeMem(ABuffer^,SizeOf(PSDOBytes));
  8221. ABuffer^ := nil;
  8222. end;
  8223. end;
  8224. function TSDOBytesField_Test.Create_Field() : ISDOField;
  8225. begin
  8226. Result := TSDOBytesField.Create() as ISDOField;
  8227. end;
  8228. procedure TSDOBytesField_Test.getBytes();
  8229. const F_OFFSET_0 = 0; F_OFFSET_1 = 1; ZERO_BYTES : TSDOBytes = nil;
  8230. var
  8231. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  8232. procedure SetConstants();
  8233. var
  8234. v : TSDOBytes;
  8235. k : Integer;
  8236. begin
  8237. SetLength(v,100);
  8238. for k := 0 to High(v) do
  8239. v[k] := k mod High(Byte);
  8240. VAL_1 := v;
  8241. v := nil;
  8242. VAL_2 := nil;
  8243. SetLength(v,200);
  8244. for k := 0 to High(v) do
  8245. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  8246. VAL_3 := v;
  8247. end;
  8248. var
  8249. obj : ISDOField;
  8250. trueBuffer : array[0..( 3 * SizeOf(TSDOBytes))] of Byte;
  8251. buffer, tmpBuffer, attributeBuffer : PByte;
  8252. valBuffer : PPSDOBytes;
  8253. begin
  8254. SetConstants();
  8255. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8256. buffer := @(trueBuffer[0]);
  8257. tmpBuffer := buffer;
  8258. attributeBuffer := buffer;
  8259. Inc(tmpBuffer);
  8260. valBuffer := PPSDOBytes(tmpBuffer);
  8261. obj := Create_Field();
  8262. valBuffer^ := @VAL_1; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  8263. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8264. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8265. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  8266. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8267. CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_0));
  8268. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8269. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8270. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  8271. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8272. CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_0));
  8273. valBuffer^ := nil;
  8274. valBuffer^ := @VAL_2; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  8275. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8276. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8277. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  8278. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8279. CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_0));
  8280. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8281. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8282. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  8283. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8284. CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_0));
  8285. valBuffer^ := nil;
  8286. valBuffer^ := @VAL_3; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  8287. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8288. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8289. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  8290. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8291. CheckEquals(VAL_3,obj.getBytes(buffer,F_OFFSET_0));
  8292. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8293. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8294. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  8295. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8296. CheckEquals(VAL_3,obj.getBytes(buffer,F_OFFSET_0));
  8297. valBuffer^ := nil;
  8298. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8299. Inc(tmpBuffer);
  8300. Inc(attributeBuffer);
  8301. valBuffer := PPSDOBytes(tmpBuffer);
  8302. valBuffer^ := @VAL_1; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  8303. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8304. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8305. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  8306. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8307. CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_1));
  8308. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8309. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8310. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  8311. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8312. CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_1));
  8313. valBuffer^ := nil;
  8314. valBuffer^ := @VAL_2; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  8315. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8316. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8317. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  8318. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8319. CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_1));
  8320. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8321. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8322. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  8323. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8324. CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_1));
  8325. valBuffer^ := nil;
  8326. valBuffer^ := @VAL_3; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  8327. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8328. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8329. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  8330. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8331. CheckEquals(VAL_3,obj.getBytes(buffer,F_OFFSET_1));
  8332. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8333. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8334. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  8335. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8336. CheckEquals(VAL_3,obj.getBytes(buffer,F_OFFSET_1));
  8337. valBuffer^ := nil;
  8338. end;
  8339. procedure TSDOBytesField_Test.getString();
  8340. const F_OFFSET_0 = 0; F_OFFSET_1 = 1; ZERO_BYTES : TSDOBytes = nil;
  8341. var
  8342. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  8343. procedure SetConstants();
  8344. var
  8345. v : TSDOBytes;
  8346. k : Integer;
  8347. begin
  8348. SetLength(v,100);
  8349. for k := 0 to High(v) do
  8350. v[k] := k mod High(Byte);
  8351. VAL_1 := v;
  8352. v := nil;
  8353. VAL_2 := nil;
  8354. SetLength(v,200);
  8355. for k := 0 to High(v) do
  8356. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  8357. VAL_3 := v;
  8358. end;
  8359. var
  8360. obj : ISDOField;
  8361. trueBuffer : array[0..100] of Byte;
  8362. buffer, tmpBuffer, attributeBuffer : PByte;
  8363. valBuffer : PPSDOBytes;
  8364. begin
  8365. SetConstants();
  8366. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8367. buffer := @(trueBuffer[0]);
  8368. tmpBuffer := buffer;
  8369. attributeBuffer := buffer;
  8370. Inc(tmpBuffer);
  8371. valBuffer := PPSDOBytes(tmpBuffer);
  8372. obj := Create_Field();
  8373. GetMem(valBuffer^,SizeOf(PSDOBytes)); FillChar(valBuffer^^,SizeOf(TSDOBytes),#0);
  8374. SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  8375. try
  8376. valBuffer^^ := VAL_1;
  8377. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8378. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8379. CheckEquals(BytesToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  8380. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8381. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8382. CheckEquals(BytesToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  8383. valBuffer^^ := nil;
  8384. valBuffer^^ := VAL_2;
  8385. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8386. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8387. CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  8388. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8389. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8390. CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  8391. valBuffer^^ := nil;
  8392. valBuffer^^ := VAL_3;
  8393. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8394. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8395. CheckEquals(BytesToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  8396. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8397. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8398. CheckEquals(BytesToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  8399. valBuffer^^ := nil;
  8400. finally
  8401. FreeMem(valBuffer^,SizeOf(PSDOBytes));
  8402. valBuffer^ := nil;
  8403. end;
  8404. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8405. Inc(tmpBuffer);
  8406. Inc(attributeBuffer);
  8407. valBuffer := PPSDOBytes(tmpBuffer);
  8408. GetMem(valBuffer^,SizeOf(PSDOBytes)); FillChar(valBuffer^^,SizeOf(TSDOBytes),#0);
  8409. SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  8410. try
  8411. valBuffer^^ := VAL_1;
  8412. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8413. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8414. CheckEquals(BytesToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  8415. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8416. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8417. CheckEquals(BytesToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  8418. valBuffer^^ := nil;
  8419. valBuffer^^ := VAL_2;
  8420. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8421. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8422. CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  8423. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8424. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8425. CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  8426. valBuffer^^ := nil;
  8427. valBuffer^^ := VAL_3;
  8428. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8429. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8430. CheckEquals(BytesToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  8431. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8432. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8433. CheckEquals(BytesToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  8434. valBuffer^^ := nil;
  8435. finally
  8436. FreeMem(valBuffer^,SizeOf(PSDOBytes));
  8437. end;
  8438. end;
  8439. procedure TSDOBytesField_Test.setBytes();
  8440. const F_OFFSET_0 = 0; F_OFFSET_1 = 1; ZERO_BYTES : TSDOBytes = nil;
  8441. var
  8442. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  8443. procedure SetConstants();
  8444. var
  8445. v : TSDOBytes;
  8446. k : Integer;
  8447. begin
  8448. SetLength(v,100);
  8449. for k := 0 to High(v) do
  8450. v[k] := k mod High(Byte);
  8451. VAL_1 := v;
  8452. v := nil;
  8453. VAL_2 := nil;
  8454. SetLength(v,200);
  8455. for k := 0 to High(v) do
  8456. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  8457. VAL_3 := v;
  8458. end;
  8459. var
  8460. obj : ISDOField;
  8461. trueBuffer : array[0..100] of Byte;
  8462. buffer, tmpBuffer, startBuffer : PByte;
  8463. valBuffer : PPSDOBytes;
  8464. begin
  8465. SetConstants();
  8466. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8467. buffer := @(trueBuffer[0]);
  8468. tmpBuffer := buffer;
  8469. startBuffer := tmpBuffer;
  8470. Inc(tmpBuffer);
  8471. valBuffer := PPSDOBytes(tmpBuffer);
  8472. obj := Create_Field();
  8473. obj.setBytes(buffer,F_OFFSET_0,nil);
  8474. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8475. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8476. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8477. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  8478. obj.setBytes(buffer,F_OFFSET_0,VAL_1);
  8479. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8480. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8481. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8482. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8483. CheckEquals(VAL_1,valBuffer^^);
  8484. obj.setBytes(buffer,F_OFFSET_0,VAL_2);
  8485. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8486. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8487. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8488. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8489. CheckEquals(VAL_2,valBuffer^^);
  8490. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  8491. obj.setBytes(buffer,F_OFFSET_0,VAL_3);
  8492. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8493. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8494. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8495. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8496. CheckEquals(VAL_3,valBuffer^^);
  8497. // Clean up to avoid false MEM-LEAK
  8498. CleanUpBuffer(valBuffer);
  8499. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8500. startBuffer := tmpBuffer;
  8501. Inc(tmpBuffer);
  8502. valBuffer := PPSDOBytes(tmpBuffer);
  8503. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  8504. obj.setBytes(buffer,F_OFFSET_1,nil);
  8505. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8506. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8507. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8508. obj.setBytes(buffer,F_OFFSET_1,VAL_1);
  8509. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8510. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8511. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8512. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8513. CheckEquals(VAL_1,valBuffer^^);
  8514. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  8515. obj.setBytes(buffer,F_OFFSET_1,VAL_2);
  8516. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8517. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8518. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8519. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8520. CheckEquals(VAL_2,valBuffer^^);
  8521. obj.setBytes(buffer,F_OFFSET_1,VAL_3);
  8522. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8523. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8524. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8525. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8526. CheckEquals(VAL_3,valBuffer^^);
  8527. // Clean up to avoid false MEM-LEAK
  8528. CleanUpBuffer(valBuffer);
  8529. end;
  8530. procedure TSDOBytesField_Test.setString();
  8531. const F_OFFSET_0 = 0; F_OFFSET_1 = 1; ZERO_BYTES : TSDOBytes = nil;
  8532. var
  8533. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  8534. procedure SetConstants();
  8535. var
  8536. v : TSDOBytes;
  8537. k : Integer;
  8538. begin
  8539. SetLength(v,100);
  8540. for k := 0 to High(v) do
  8541. v[k] := k mod High(Byte);
  8542. VAL_1 := v;
  8543. v := nil;
  8544. VAL_2 := nil;
  8545. SetLength(v,200);
  8546. for k := 0 to High(v) do
  8547. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  8548. VAL_3 := v;
  8549. end;
  8550. var
  8551. obj : ISDOField;
  8552. trueBuffer : array[0..( 3 * SizeOf(TSDOBytes))] of Byte;
  8553. buffer, tmpBuffer, attributeBuffer : PByte;
  8554. valBuffer : PPSDOBytes;
  8555. begin
  8556. SetConstants();
  8557. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8558. buffer := @(trueBuffer[0]);
  8559. tmpBuffer := buffer;
  8560. attributeBuffer := buffer;
  8561. Inc(tmpBuffer);
  8562. valBuffer := PPSDOBytes(tmpBuffer);
  8563. obj := Create_Field();
  8564. obj.setString(buffer,F_OFFSET_0,BytesToString(VAL_1));
  8565. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8566. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8567. CheckEquals(VAL_1,valBuffer^^);
  8568. obj.setString(buffer,F_OFFSET_0,BytesToString(VAL_2));
  8569. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8570. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8571. CheckEquals(VAL_2,valBuffer^^);
  8572. CleanUpBuffer(valBuffer);
  8573. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8574. Inc(tmpBuffer);
  8575. Inc(attributeBuffer);
  8576. valBuffer := PPSDOBytes(tmpBuffer);
  8577. obj.setString(buffer,F_OFFSET_1,BytesToString(VAL_1));
  8578. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8579. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8580. CheckEquals(VAL_1,valBuffer^^);
  8581. obj.setString(buffer,F_OFFSET_1,BytesToString(VAL_2));
  8582. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8583. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8584. CheckEquals(VAL_2,valBuffer^^);
  8585. CleanUpBuffer(valBuffer);
  8586. end;
  8587. procedure TSDOBytesField_Test.CompareVarToBytes(
  8588. const ABytes : TSDOBytes;
  8589. const AVar : Variant
  8590. );
  8591. var
  8592. i, c, lb : Integer;
  8593. begin
  8594. if (Length(ABytes) = 0) then
  8595. Check(
  8596. ( (VarIsEmpty(AVar) or VarIsNull(AVar)) or
  8597. (VarIsArray(AVar) and (VarArrayHighBound(AVar,1) < VarArrayLowBound(AVar,1)) )
  8598. ),
  8599. 'NULL Bytes'
  8600. );
  8601. Check(VarIsArray(AVar),'Array expected');
  8602. c := Length(ABytes);
  8603. lb := VarArrayLowBound(AVar,1);
  8604. CheckEquals(c,(VarArrayHighBound(AVar,1)-lb+1),'Array Length');
  8605. for i := Low(ABytes) to High(ABytes) do
  8606. CheckEquals(ABytes[i],AVar[lb+i]);
  8607. end;
  8608. procedure TSDOBytesField_Test.getVariant();
  8609. const
  8610. F_OFFSET = 0;
  8611. ZERO_BYTES : TSDOBytes = nil;
  8612. var
  8613. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  8614. SAMPLE_VALUES : array[0..3] of TSDOBytes;
  8615. procedure SetConstants();
  8616. var
  8617. v : TSDOBytes;
  8618. k : Integer;
  8619. begin
  8620. SetLength(v,100);
  8621. for k := 0 to High(v) do
  8622. v[k] := k mod High(Byte);
  8623. VAL_1 := v;
  8624. v := nil;
  8625. VAL_2 := nil;
  8626. SetLength(v,200);
  8627. for k := 0 to High(v) do
  8628. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  8629. VAL_3 := v;
  8630. SAMPLE_VALUES[0] := nil;
  8631. SAMPLE_VALUES[1] := VAL_1;
  8632. SAMPLE_VALUES[2] := VAL_2;
  8633. SAMPLE_VALUES[3] := VAL_3;
  8634. end;
  8635. var
  8636. obj : ISDOField;
  8637. intVal : QWord;
  8638. buffer : PByte;
  8639. v : Variant;
  8640. i : Integer;
  8641. begin
  8642. intVal := 0;
  8643. buffer := @intVal;
  8644. obj := Create_Field();
  8645. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  8646. obj.setBytes(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  8647. v := obj.getVariant(buffer,F_OFFSET);
  8648. CompareVarToBytes(SAMPLE_VALUES[i],v);
  8649. end;
  8650. end;
  8651. procedure TSDOBytesField_Test.setVariant();
  8652. const
  8653. F_OFFSET = 0;
  8654. ZERO_BYTES : TSDOBytes = nil;
  8655. var
  8656. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  8657. SAMPLE_VALUES : array[0..3] of TSDOBytes;
  8658. procedure SetConstants();
  8659. var
  8660. v : TSDOBytes;
  8661. k : Integer;
  8662. begin
  8663. SetLength(v,100);
  8664. for k := 0 to High(v) do
  8665. v[k] := k mod High(Byte);
  8666. VAL_1 := v;
  8667. v := nil;
  8668. VAL_2 := nil;
  8669. SetLength(v,200);
  8670. for k := 0 to High(v) do
  8671. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  8672. VAL_3 := v;
  8673. SAMPLE_VALUES[0] := nil;
  8674. SAMPLE_VALUES[1] := VAL_1;
  8675. SAMPLE_VALUES[2] := VAL_2;
  8676. SAMPLE_VALUES[3] := VAL_3;
  8677. end;
  8678. var
  8679. obj : ISDOField;
  8680. intVal : QWord;
  8681. buffer : PByte;
  8682. v : Variant;
  8683. i : Integer;
  8684. begin
  8685. intVal := 0;
  8686. buffer := @intVal;
  8687. obj := Create_Field();
  8688. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  8689. v := SAMPLE_VALUES[i];
  8690. obj.setVariant(buffer,F_OFFSET,v);
  8691. CheckEquals(SAMPLE_VALUES[i], obj.getBytes(buffer,F_OFFSET));
  8692. end;
  8693. end;
  8694. {$ENDIF HAS_SDO_BYTES}
  8695. {$IFDEF HAS_SDO_CURRENCY}
  8696. function TSDOCurrencyField_Test.Create_Field() : ISDOField;
  8697. begin
  8698. Result := TSDOCurrencyField.Create() as ISDOField;
  8699. end;
  8700. procedure TSDOCurrencyField_Test.getCurrency();
  8701. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8702. VAL_1 : TSDOCurrency = 123458679123.1234; VAL_2 : TSDOCurrency = -98765532166547.9876; VAL_3 : TSDOCurrency = 0;
  8703. var
  8704. obj : ISDOField;
  8705. intVal : array[0..100] of Byte;
  8706. buffer, tmpBuffer, attributeBuffer : PByte;
  8707. valBuffer : PSDOCurrency;
  8708. begin
  8709. FillChar(intVal,SizeOf(intVal),#0);
  8710. buffer := @intVal;
  8711. tmpBuffer := buffer;
  8712. attributeBuffer := buffer;
  8713. Inc(tmpBuffer);
  8714. valBuffer := PSDOCurrency(tmpBuffer);
  8715. obj := Create_Field();
  8716. valBuffer^ := VAL_1;
  8717. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8718. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8719. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8720. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8721. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
  8722. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8723. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8724. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8725. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8726. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
  8727. valBuffer^ := VAL_2;
  8728. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8729. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8730. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8731. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8732. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
  8733. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8734. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8735. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8736. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8737. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
  8738. valBuffer^ := VAL_3;
  8739. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8740. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8741. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8742. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8743. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
  8744. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8745. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8746. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8747. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8748. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
  8749. FillChar(intVal,SizeOf(intVal),#0);
  8750. Inc(tmpBuffer);
  8751. Inc(attributeBuffer);
  8752. valBuffer := PSDOCurrency(tmpBuffer);
  8753. valBuffer^ := VAL_1;
  8754. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8755. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8756. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8757. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8758. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
  8759. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8760. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8761. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8762. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8763. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
  8764. valBuffer^ := VAL_2;
  8765. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8766. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8767. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8768. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8769. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
  8770. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8771. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8772. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8773. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8774. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
  8775. valBuffer^ := VAL_3;
  8776. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8777. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8778. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8779. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8780. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
  8781. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8782. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8783. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8784. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8785. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
  8786. end;
  8787. procedure TSDOCurrencyField_Test.setCurrency();
  8788. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8789. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8790. var
  8791. obj : ISDOField;
  8792. intVal : array[0..100] of Byte;
  8793. buffer, tmpBuffer, attributeBuffer : PByte;
  8794. valBuffer : PSDOCurrency;
  8795. begin
  8796. FillChar(intVal,SizeOf(intVal),#0);
  8797. buffer := @intVal;
  8798. tmpBuffer := buffer;
  8799. attributeBuffer := buffer;
  8800. Inc(tmpBuffer);
  8801. valBuffer := PSDOCurrency(tmpBuffer);
  8802. obj := Create_Field();
  8803. obj.setDouble(buffer,F_OFFSET_0,VAL_1);
  8804. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8805. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8806. CheckEquals(VAL_1,valBuffer^);
  8807. obj.setDouble(buffer,F_OFFSET_0,VAL_2);
  8808. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8809. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8810. CheckEquals(VAL_2,valBuffer^);
  8811. obj.setDouble(buffer,F_OFFSET_0,VAL_3);
  8812. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8813. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8814. CheckEquals(VAL_3,valBuffer^);
  8815. FillChar(intVal,SizeOf(intVal),#0);
  8816. Inc(tmpBuffer);
  8817. Inc(attributeBuffer);
  8818. valBuffer := PSDOCurrency(tmpBuffer);
  8819. obj.setDouble(buffer,F_OFFSET_1,VAL_1);
  8820. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8821. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8822. CheckEquals(VAL_1,valBuffer^);
  8823. obj.setDouble(buffer,F_OFFSET_1,VAL_2);
  8824. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8825. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8826. CheckEquals(VAL_2,valBuffer^);
  8827. obj.setDouble(buffer,F_OFFSET_1,VAL_3);
  8828. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8829. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8830. CheckEquals(VAL_3,valBuffer^);
  8831. end;
  8832. procedure TSDOCurrencyField_Test.getDouble();
  8833. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8834. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8835. var
  8836. obj : ISDOField;
  8837. intVal : array[0..100] of Byte;
  8838. buffer, tmpBuffer, attributeBuffer : PByte;
  8839. valBuffer : PSDOCurrency;
  8840. begin
  8841. FillChar(intVal,SizeOf(intVal),#0);
  8842. buffer := @intVal;
  8843. tmpBuffer := buffer;
  8844. attributeBuffer := buffer;
  8845. Inc(tmpBuffer);
  8846. valBuffer := PSDOCurrency(tmpBuffer);
  8847. obj := Create_Field();
  8848. valBuffer^ := VAL_1;
  8849. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8850. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8851. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8852. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8853. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  8854. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8855. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8856. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8857. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8858. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  8859. valBuffer^ := VAL_2;
  8860. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8861. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8862. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8863. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8864. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  8865. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8866. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8867. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8868. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8869. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  8870. valBuffer^ := VAL_3;
  8871. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8872. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8873. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8874. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8875. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  8876. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8877. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8878. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8879. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8880. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  8881. FillChar(intVal,SizeOf(intVal),#0);
  8882. Inc(tmpBuffer);
  8883. Inc(attributeBuffer);
  8884. valBuffer := PSDOCurrency(tmpBuffer);
  8885. valBuffer^ := VAL_1;
  8886. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8887. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8888. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8889. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8890. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  8891. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8892. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8893. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8894. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8895. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  8896. valBuffer^ := VAL_2;
  8897. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8898. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8899. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8900. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8901. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  8902. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8903. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8904. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8905. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8906. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  8907. valBuffer^ := VAL_3;
  8908. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8909. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8910. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8911. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8912. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  8913. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8914. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8915. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8916. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8917. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  8918. end;
  8919. procedure TSDOCurrencyField_Test.setDouble();
  8920. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8921. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8922. var
  8923. obj : ISDOField;
  8924. intVal : array[0..100] of Byte;
  8925. buffer, tmpBuffer, attributeBuffer : PByte;
  8926. valBuffer : PSDOCurrency;
  8927. begin
  8928. FillChar(intVal,SizeOf(intVal),#0);
  8929. buffer := @intVal;
  8930. tmpBuffer := buffer;
  8931. attributeBuffer := buffer;
  8932. Inc(tmpBuffer);
  8933. valBuffer := PSDOCurrency(tmpBuffer);
  8934. obj := Create_Field();
  8935. obj.setDouble(buffer,F_OFFSET_0,VAL_1);
  8936. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8937. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8938. CheckEquals(VAL_1,valBuffer^);
  8939. obj.setDouble(buffer,F_OFFSET_0,VAL_2);
  8940. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8941. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8942. CheckEquals(VAL_2,valBuffer^);
  8943. obj.setDouble(buffer,F_OFFSET_0,VAL_3);
  8944. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8945. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8946. CheckEquals(VAL_3,valBuffer^);
  8947. FillChar(intVal,SizeOf(intVal),#0);
  8948. Inc(tmpBuffer);
  8949. Inc(attributeBuffer);
  8950. valBuffer := PSDOCurrency(tmpBuffer);
  8951. obj.setDouble(buffer,F_OFFSET_1,VAL_1);
  8952. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8953. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8954. CheckEquals(VAL_1,valBuffer^);
  8955. obj.setDouble(buffer,F_OFFSET_1,VAL_2);
  8956. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8957. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8958. CheckEquals(VAL_2,valBuffer^);
  8959. obj.setDouble(buffer,F_OFFSET_1,VAL_3);
  8960. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8961. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8962. CheckEquals(VAL_3,valBuffer^);
  8963. end;
  8964. procedure TSDOCurrencyField_Test.getFloat();
  8965. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8966. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8967. var
  8968. obj : ISDOField;
  8969. intVal : array[0..100] of Byte;
  8970. buffer, tmpBuffer, attributeBuffer : PByte;
  8971. valBuffer : PSDOCurrency;
  8972. begin
  8973. FillChar(intVal,SizeOf(intVal),#0);
  8974. buffer := @intVal;
  8975. tmpBuffer := buffer;
  8976. attributeBuffer := buffer;
  8977. Inc(tmpBuffer);
  8978. valBuffer := PSDOCurrency(tmpBuffer);
  8979. obj := Create_Field();
  8980. valBuffer^ := VAL_1;
  8981. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8982. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8983. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8984. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8985. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
  8986. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8987. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8988. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8989. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8990. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
  8991. valBuffer^ := VAL_2;
  8992. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8993. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8994. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8995. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8996. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
  8997. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8998. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8999. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  9000. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9001. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
  9002. valBuffer^ := VAL_3;
  9003. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9004. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9005. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  9006. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9007. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
  9008. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9009. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9010. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  9011. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9012. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
  9013. FillChar(intVal,SizeOf(intVal),#0);
  9014. Inc(tmpBuffer);
  9015. Inc(attributeBuffer);
  9016. valBuffer := PSDOCurrency(tmpBuffer);
  9017. valBuffer^ := VAL_1;
  9018. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9019. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9020. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  9021. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9022. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
  9023. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9024. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9025. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  9026. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9027. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
  9028. valBuffer^ := VAL_2;
  9029. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9030. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9031. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  9032. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9033. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
  9034. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9035. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9036. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  9037. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9038. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
  9039. valBuffer^ := VAL_3;
  9040. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9041. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9042. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  9043. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9044. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
  9045. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9046. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9047. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  9048. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9049. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
  9050. end;
  9051. procedure TSDOCurrencyField_Test.setFloat();
  9052. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9053. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  9054. var
  9055. obj : ISDOField;
  9056. intVal : array[0..100] of Byte;
  9057. buffer, tmpBuffer, attributeBuffer : PByte;
  9058. valBuffer : PSDOCurrency;
  9059. begin
  9060. FillChar(intVal,SizeOf(intVal),#0);
  9061. buffer := @intVal;
  9062. tmpBuffer := buffer;
  9063. attributeBuffer := buffer;
  9064. Inc(tmpBuffer);
  9065. valBuffer := PSDOCurrency(tmpBuffer);
  9066. obj := Create_Field();
  9067. obj.setFloat(buffer,F_OFFSET_0,VAL_1);
  9068. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9069. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9070. CheckEquals(VAL_1,valBuffer^);
  9071. obj.setFloat(buffer,F_OFFSET_0,VAL_2);
  9072. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9073. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9074. CheckEquals(VAL_2,valBuffer^);
  9075. obj.setFloat(buffer,F_OFFSET_0,VAL_3);
  9076. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9077. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9078. CheckEquals(VAL_3,valBuffer^);
  9079. FillChar(intVal,SizeOf(intVal),#0);
  9080. Inc(tmpBuffer);
  9081. Inc(attributeBuffer);
  9082. valBuffer := PSDOCurrency(tmpBuffer);
  9083. obj.setFloat(buffer,F_OFFSET_1,VAL_1);
  9084. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9085. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9086. CheckEquals(VAL_1,valBuffer^);
  9087. obj.setFloat(buffer,F_OFFSET_1,VAL_2);
  9088. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9089. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9090. CheckEquals(VAL_2,valBuffer^);
  9091. obj.setFloat(buffer,F_OFFSET_1,VAL_3);
  9092. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9093. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9094. CheckEquals(VAL_3,valBuffer^);
  9095. end;
  9096. procedure TSDOCurrencyField_Test.getString();
  9097. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9098. VAL_1 = 12345.6789; VAL_2 = -987654.3211; VAL_3 = 0;
  9099. var
  9100. obj : ISDOField;
  9101. intVal : array[0..100] of Byte;
  9102. buffer, tmpBuffer, attributeBuffer : PByte;
  9103. valBuffer : PSDOCurrency;
  9104. begin
  9105. FillChar(intVal,SizeOf(intVal),#0);
  9106. buffer := @intVal;
  9107. tmpBuffer := buffer;
  9108. attributeBuffer := buffer;
  9109. Inc(tmpBuffer);
  9110. valBuffer := PSDOCurrency(tmpBuffer);
  9111. obj := Create_Field();
  9112. valBuffer^ := VAL_1;
  9113. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9114. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9115. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  9116. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9117. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9118. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  9119. valBuffer^ := VAL_2;
  9120. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9121. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9122. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  9123. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9124. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9125. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  9126. valBuffer^ := VAL_3;
  9127. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9128. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9129. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  9130. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9131. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9132. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  9133. FillChar(intVal,SizeOf(intVal),#0);
  9134. Inc(tmpBuffer);
  9135. Inc(attributeBuffer);
  9136. valBuffer := PSDOCurrency(tmpBuffer);
  9137. valBuffer^ := VAL_1;
  9138. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9139. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9140. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  9141. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9142. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9143. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  9144. valBuffer^ := VAL_2;
  9145. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9146. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9147. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  9148. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9149. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9150. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  9151. valBuffer^ := VAL_3;
  9152. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9153. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9154. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  9155. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9156. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9157. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  9158. end;
  9159. procedure TSDOCurrencyField_Test.getVariant();
  9160. const
  9161. F_OFFSET = 0;
  9162. SAMPLE_VALUES : array[0..5] of TSDOCurrency = (-12345.1234,-678.258,0,1,12,456789);
  9163. var
  9164. obj : ISDOField;
  9165. intVal : array[0..100] of Byte;
  9166. buffer : PByte;
  9167. v : Variant;
  9168. i : Integer;
  9169. begin
  9170. FillChar(intVal,SizeOf(intVal),#0);
  9171. buffer := @intVal;
  9172. obj := Create_Field();
  9173. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  9174. obj.setCurrency(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  9175. v := obj.getVariant(buffer,F_OFFSET);
  9176. CheckEquals(SAMPLE_VALUES[i],TSDOCurrency(v));
  9177. end;
  9178. end;
  9179. procedure TSDOCurrencyField_Test.setString();
  9180. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9181. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  9182. var
  9183. obj : ISDOField;
  9184. intVal : array[0..100] of Byte;
  9185. buffer, tmpBuffer, attributeBuffer : PByte;
  9186. valBuffer : PSDOCurrency;
  9187. begin
  9188. FillChar(intVal,SizeOf(intVal),#0);
  9189. buffer := @intVal;
  9190. tmpBuffer := buffer;
  9191. attributeBuffer := buffer;
  9192. Inc(tmpBuffer);
  9193. valBuffer := PSDOCurrency(tmpBuffer);
  9194. obj := Create_Field();
  9195. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.CurrencyToString(VAL_1));
  9196. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9197. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9198. CheckEquals(VAL_1,valBuffer^);
  9199. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.CurrencyToString(VAL_2));
  9200. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9201. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9202. CheckEquals(VAL_2,valBuffer^);
  9203. FillChar(intVal,SizeOf(intVal),#0);
  9204. Inc(tmpBuffer);
  9205. Inc(attributeBuffer);
  9206. valBuffer := PSDOCurrency(tmpBuffer);
  9207. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.CurrencyToString(VAL_1));
  9208. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9209. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9210. CheckEquals(VAL_1,valBuffer^);
  9211. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.CurrencyToString(VAL_2));
  9212. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9213. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9214. CheckEquals(VAL_2,valBuffer^);
  9215. end;
  9216. procedure TSDOCurrencyField_Test.setVariant();
  9217. const
  9218. F_OFFSET = 0;
  9219. SAMPLE_VALUES : array[0..5] of TSDOCurrency = (-12345.1234,-678.258,0,1,12,456789);
  9220. var
  9221. obj : ISDOField;
  9222. intVal : array[0..100] of Byte;
  9223. buffer : PByte;
  9224. value : Variant;
  9225. i : Integer;
  9226. begin
  9227. FillChar(intVal,SizeOf(intVal),#0);
  9228. buffer := @intVal;
  9229. obj := Create_Field();
  9230. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  9231. obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  9232. value := obj.getCurrency(buffer,F_OFFSET);
  9233. Check((SAMPLE_VALUES[i] = value));
  9234. end;
  9235. end;
  9236. {$ENDIF HAS_SDO_CURRENCY}
  9237. {$IFDEF HAS_SDO_DOUBLE}
  9238. function TSDODoubleField_Test.Create_Field() : ISDOField;
  9239. begin
  9240. Result := TSDODoubleField.Create() as ISDOField;
  9241. end;
  9242. procedure TSDODoubleField_Test.getCurrency();
  9243. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9244. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -987654; VAL_3 : TSDODouble = 0;
  9245. var
  9246. obj : ISDOField;
  9247. intVal : array[0..100] of Byte;
  9248. buffer, tmpBuffer, attributeBuffer : PByte;
  9249. valBuffer : PSDODouble;
  9250. begin
  9251. FillChar(intVal,SizeOf(intVal),#0);
  9252. buffer := @intVal;
  9253. tmpBuffer := buffer;
  9254. attributeBuffer := buffer;
  9255. Inc(tmpBuffer);
  9256. valBuffer := PSDODouble(tmpBuffer);
  9257. obj := Create_Field();
  9258. valBuffer^ := VAL_1;
  9259. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9260. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9261. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
  9262. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9263. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9264. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
  9265. valBuffer^ := VAL_2;
  9266. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9267. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9268. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
  9269. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9270. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9271. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
  9272. valBuffer^ := VAL_3;
  9273. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9274. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9275. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
  9276. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9277. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9278. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
  9279. FillChar(intVal,SizeOf(intVal),#0);
  9280. Inc(tmpBuffer);
  9281. Inc(attributeBuffer);
  9282. valBuffer := PSDODouble(tmpBuffer);
  9283. valBuffer^ := VAL_1;
  9284. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9285. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9286. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
  9287. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9288. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9289. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
  9290. valBuffer^ := VAL_2;
  9291. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9292. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9293. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
  9294. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9295. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9296. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
  9297. valBuffer^ := VAL_3;
  9298. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9299. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9300. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
  9301. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9302. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9303. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
  9304. end;
  9305. procedure TSDODoubleField_Test.setCurrency();
  9306. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9307. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -98765; VAL_3 : TSDODouble = 0;
  9308. var
  9309. obj : ISDOField;
  9310. intVal : array[0..100] of Byte;
  9311. buffer, tmpBuffer, attributeBuffer : PByte;
  9312. valBuffer : PSDODouble;
  9313. begin
  9314. FillChar(intVal,SizeOf(intVal),#0);
  9315. buffer := @intVal;
  9316. tmpBuffer := buffer;
  9317. attributeBuffer := buffer;
  9318. Inc(tmpBuffer);
  9319. valBuffer := PSDODouble(tmpBuffer);
  9320. obj := Create_Field();
  9321. obj.setCurrency(buffer,F_OFFSET_0,VAL_1);
  9322. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9323. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9324. CheckEquals(VAL_1,valBuffer^);
  9325. obj.setCurrency(buffer,F_OFFSET_0,VAL_2);
  9326. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9327. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9328. CheckEquals(VAL_2,valBuffer^);
  9329. FillChar(intVal,SizeOf(intVal),#0);
  9330. Inc(tmpBuffer);
  9331. Inc(attributeBuffer);
  9332. valBuffer := PSDODouble(tmpBuffer);
  9333. obj.setCurrency(buffer,F_OFFSET_1,VAL_1);
  9334. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9335. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9336. CheckEquals(VAL_1,valBuffer^);
  9337. obj.setCurrency(buffer,F_OFFSET_1,VAL_2);
  9338. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9339. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9340. CheckEquals(VAL_2,valBuffer^);
  9341. end;
  9342. procedure TSDODoubleField_Test.getDouble();
  9343. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9344. VAL_1 : TSDODouble = 123458679123.1234; VAL_2 : TSDODouble = -98765532166547.9876; VAL_3 : TSDODouble = 0;
  9345. var
  9346. obj : ISDOField;
  9347. intVal : array[0..100] of Byte;
  9348. buffer, tmpBuffer, attributeBuffer : PByte;
  9349. valBuffer : PSDODouble;
  9350. begin
  9351. FillChar(intVal,SizeOf(intVal),#0);
  9352. buffer := @intVal;
  9353. tmpBuffer := buffer;
  9354. attributeBuffer := buffer;
  9355. Inc(tmpBuffer);
  9356. valBuffer := PSDODouble(tmpBuffer);
  9357. obj := Create_Field();
  9358. valBuffer^ := VAL_1;
  9359. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9360. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9361. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  9362. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9363. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  9364. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9365. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9366. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  9367. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9368. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  9369. valBuffer^ := VAL_2;
  9370. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9371. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9372. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  9373. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9374. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  9375. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9376. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9377. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  9378. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9379. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  9380. valBuffer^ := VAL_3;
  9381. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9382. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9383. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  9384. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9385. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  9386. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9387. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9388. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  9389. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9390. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  9391. FillChar(intVal,SizeOf(intVal),#0);
  9392. Inc(tmpBuffer);
  9393. Inc(attributeBuffer);
  9394. valBuffer := PSDODouble(tmpBuffer);
  9395. valBuffer^ := VAL_1;
  9396. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9397. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9398. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  9399. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9400. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  9401. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9402. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9403. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  9404. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9405. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  9406. valBuffer^ := VAL_2;
  9407. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9408. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9409. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  9410. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9411. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  9412. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9413. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9414. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  9415. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9416. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  9417. valBuffer^ := VAL_3;
  9418. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9419. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9420. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  9421. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9422. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  9423. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9424. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  9425. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  9426. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9427. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  9428. end;
  9429. procedure TSDODoubleField_Test.setDouble();
  9430. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9431. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -98765; VAL_3 : TSDODouble = 0;
  9432. var
  9433. obj : ISDOField;
  9434. intVal : array[0..100] of Byte;
  9435. buffer, tmpBuffer, attributeBuffer : PByte;
  9436. valBuffer : PSDODouble;
  9437. begin
  9438. FillChar(intVal,SizeOf(intVal),#0);
  9439. buffer := @intVal;
  9440. tmpBuffer := buffer;
  9441. attributeBuffer := buffer;
  9442. Inc(tmpBuffer);
  9443. valBuffer := PSDODouble(tmpBuffer);
  9444. obj := Create_Field();
  9445. obj.setDouble(buffer,F_OFFSET_0,VAL_1);
  9446. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9447. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9448. CheckEquals(VAL_1,valBuffer^);
  9449. obj.setDouble(buffer,F_OFFSET_0,VAL_2);
  9450. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9451. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9452. CheckEquals(VAL_2,valBuffer^);
  9453. obj.setDouble(buffer,F_OFFSET_0,VAL_3);
  9454. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9455. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9456. CheckEquals(VAL_3,valBuffer^);
  9457. FillChar(intVal,SizeOf(intVal),#0);
  9458. Inc(tmpBuffer);
  9459. Inc(attributeBuffer);
  9460. valBuffer := PSDODouble(tmpBuffer);
  9461. obj.setDouble(buffer,F_OFFSET_1,VAL_1);
  9462. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9463. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9464. CheckEquals(VAL_1,valBuffer^);
  9465. obj.setDouble(buffer,F_OFFSET_1,VAL_2);
  9466. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9467. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9468. CheckEquals(VAL_2,valBuffer^);
  9469. obj.setDouble(buffer,F_OFFSET_1,VAL_3);
  9470. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9471. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9472. CheckEquals(VAL_3,valBuffer^);
  9473. end;
  9474. procedure TSDODoubleField_Test.getFloat();
  9475. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9476. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -987654; VAL_3 : TSDODouble = 0;
  9477. var
  9478. obj : ISDOField;
  9479. intVal : array[0..100] of Byte;
  9480. buffer, tmpBuffer, attributeBuffer : PByte;
  9481. valBuffer : PSDODouble;
  9482. begin
  9483. FillChar(intVal,SizeOf(intVal),#0);
  9484. buffer := @intVal;
  9485. tmpBuffer := buffer;
  9486. attributeBuffer := buffer;
  9487. Inc(tmpBuffer);
  9488. valBuffer := PSDODouble(tmpBuffer);
  9489. obj := Create_Field();
  9490. valBuffer^ := VAL_1;
  9491. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9492. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9493. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
  9494. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9495. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9496. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
  9497. valBuffer^ := VAL_2;
  9498. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9499. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9500. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
  9501. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9502. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9503. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
  9504. valBuffer^ := VAL_3;
  9505. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9506. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9507. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
  9508. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9509. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9510. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
  9511. FillChar(intVal,SizeOf(intVal),#0);
  9512. Inc(tmpBuffer);
  9513. Inc(attributeBuffer);
  9514. valBuffer := PSDODouble(tmpBuffer);
  9515. valBuffer^ := VAL_1;
  9516. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9517. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9518. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
  9519. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9520. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9521. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
  9522. valBuffer^ := VAL_2;
  9523. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9524. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9525. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
  9526. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9527. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9528. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
  9529. valBuffer^ := VAL_3;
  9530. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9531. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9532. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
  9533. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9534. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9535. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
  9536. end;
  9537. procedure TSDODoubleField_Test.setFloat();
  9538. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9539. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -98765; VAL_3 : TSDODouble = 0;
  9540. var
  9541. obj : ISDOField;
  9542. intVal : array[0..100] of Byte;
  9543. buffer, tmpBuffer, attributeBuffer : PByte;
  9544. valBuffer : PSDODouble;
  9545. begin
  9546. FillChar(intVal,SizeOf(intVal),#0);
  9547. buffer := @intVal;
  9548. tmpBuffer := buffer;
  9549. attributeBuffer := buffer;
  9550. Inc(tmpBuffer);
  9551. valBuffer := PSDODouble(tmpBuffer);
  9552. obj := Create_Field();
  9553. obj.setFloat(buffer,F_OFFSET_0,VAL_1);
  9554. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9555. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9556. CheckEquals(VAL_1,valBuffer^);
  9557. obj.setFloat(buffer,F_OFFSET_0,VAL_2);
  9558. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9559. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9560. CheckEquals(VAL_2,valBuffer^);
  9561. FillChar(intVal,SizeOf(intVal),#0);
  9562. Inc(tmpBuffer);
  9563. Inc(attributeBuffer);
  9564. valBuffer := PSDODouble(tmpBuffer);
  9565. obj.setFloat(buffer,F_OFFSET_1,VAL_1);
  9566. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9567. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9568. CheckEquals(VAL_1,valBuffer^);
  9569. obj.setFloat(buffer,F_OFFSET_1,VAL_2);
  9570. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9571. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9572. CheckEquals(VAL_2,valBuffer^);
  9573. end;
  9574. procedure TSDODoubleField_Test.getString();
  9575. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9576. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -987654; VAL_3 : TSDODouble = 0;
  9577. var
  9578. obj : ISDOField;
  9579. intVal : array[0..100] of Byte;
  9580. buffer, tmpBuffer, attributeBuffer : PByte;
  9581. valBuffer : PSDODouble;
  9582. begin
  9583. FillChar(intVal,SizeOf(intVal),#0);
  9584. buffer := @intVal;
  9585. tmpBuffer := buffer;
  9586. attributeBuffer := buffer;
  9587. Inc(tmpBuffer);
  9588. valBuffer := PSDODouble(tmpBuffer);
  9589. obj := Create_Field();
  9590. valBuffer^ := VAL_1;
  9591. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9592. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9593. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  9594. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9595. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9596. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  9597. valBuffer^ := VAL_2;
  9598. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9599. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9600. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  9601. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9602. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9603. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  9604. valBuffer^ := VAL_3;
  9605. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9606. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9607. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  9608. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9609. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9610. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  9611. FillChar(intVal,SizeOf(intVal),#0);
  9612. Inc(tmpBuffer);
  9613. Inc(attributeBuffer);
  9614. valBuffer := PSDODouble(tmpBuffer);
  9615. valBuffer^ := VAL_1;
  9616. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9617. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9618. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  9619. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9620. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9621. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  9622. valBuffer^ := VAL_2;
  9623. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9624. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9625. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  9626. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9627. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9628. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  9629. valBuffer^ := VAL_3;
  9630. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9631. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9632. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  9633. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9634. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9635. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  9636. end;
  9637. procedure TSDODoubleField_Test.setString();
  9638. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9639. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -98765; VAL_3 : TSDODouble = 0;
  9640. var
  9641. obj : ISDOField;
  9642. intVal : array[0..100] of Byte;
  9643. buffer, tmpBuffer, attributeBuffer : PByte;
  9644. valBuffer : PSDODouble;
  9645. begin
  9646. FillChar(intVal,SizeOf(intVal),#0);
  9647. buffer := @intVal;
  9648. tmpBuffer := buffer;
  9649. attributeBuffer := buffer;
  9650. Inc(tmpBuffer);
  9651. valBuffer := PSDODouble(tmpBuffer);
  9652. obj := Create_Field();
  9653. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.FloatToString(VAL_1));
  9654. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9655. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9656. CheckEquals(VAL_1,valBuffer^);
  9657. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.FloatToString(VAL_2));
  9658. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9659. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9660. CheckEquals(VAL_2,valBuffer^);
  9661. FillChar(intVal,SizeOf(intVal),#0);
  9662. Inc(tmpBuffer);
  9663. Inc(attributeBuffer);
  9664. valBuffer := PSDODouble(tmpBuffer);
  9665. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.FloatToString(VAL_1));
  9666. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9667. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9668. CheckEquals(VAL_1,valBuffer^);
  9669. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.FloatToString(VAL_2));
  9670. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9671. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9672. CheckEquals(VAL_2,valBuffer^);
  9673. end;
  9674. procedure TSDODoubleField_Test.getVariant();
  9675. const
  9676. F_OFFSET = 0;
  9677. SAMPLE_VALUES : array[0..5] of TSDODouble = (-12345,-678,0,1,12,456789);
  9678. var
  9679. obj : ISDOField;
  9680. intVal : array[0..100] of Byte;
  9681. buffer : PByte;
  9682. v : Variant;
  9683. i : Integer;
  9684. begin
  9685. FillChar(intVal,SizeOf(intVal),#0);
  9686. buffer := @intVal;
  9687. obj := Create_Field();
  9688. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  9689. obj.setDouble(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  9690. v := obj.getVariant(buffer,F_OFFSET);
  9691. CheckEquals(SAMPLE_VALUES[i],TSDODouble(v));
  9692. end;
  9693. end;
  9694. procedure TSDODoubleField_Test.setVariant();
  9695. const
  9696. F_OFFSET = 0;
  9697. SAMPLE_VALUES : array[0..5] of TSDODouble = (-12345,-678,0,1,12,456789);
  9698. var
  9699. obj : ISDOField;
  9700. intVal : array[0..100] of Byte;
  9701. buffer : PByte;
  9702. value : Variant;
  9703. i : Integer;
  9704. begin
  9705. FillChar(intVal,SizeOf(intVal),#0);
  9706. buffer := @intVal;
  9707. obj := Create_Field();
  9708. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  9709. obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  9710. value := obj.getDouble(buffer,F_OFFSET);
  9711. Check((SAMPLE_VALUES[i] = value));
  9712. end;
  9713. end;
  9714. {$ENDIF HAS_SDO_DOUBLE}
  9715. {$IFDEF HAS_SDO_FLOAT}
  9716. function TSDOFloatField_Test.Create_Field() : ISDOField;
  9717. begin
  9718. Result := TSDOFloatField.Create() as ISDOField;
  9719. end;
  9720. procedure TSDOFloatField_Test.getCurrency();
  9721. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9722. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -987654; VAL_3 : TSDOFloat = 0;
  9723. var
  9724. obj : ISDOField;
  9725. intVal : array[0..100] of Byte;
  9726. buffer, tmpBuffer, attributeBuffer : PByte;
  9727. valBuffer : PSDOFloat;
  9728. begin
  9729. FillChar(intVal,SizeOf(intVal),#0);
  9730. buffer := @intVal;
  9731. tmpBuffer := buffer;
  9732. attributeBuffer := buffer;
  9733. Inc(tmpBuffer);
  9734. valBuffer := PSDOFloat(tmpBuffer);
  9735. obj := Create_Field();
  9736. valBuffer^ := VAL_1;
  9737. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9738. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9739. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
  9740. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9741. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9742. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
  9743. valBuffer^ := VAL_2;
  9744. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9745. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9746. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
  9747. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9748. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9749. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
  9750. valBuffer^ := VAL_3;
  9751. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9752. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9753. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
  9754. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9755. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9756. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
  9757. FillChar(intVal,SizeOf(intVal),#0);
  9758. Inc(tmpBuffer);
  9759. Inc(attributeBuffer);
  9760. valBuffer := PSDOFloat(tmpBuffer);
  9761. valBuffer^ := VAL_1;
  9762. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9763. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9764. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
  9765. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9766. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9767. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
  9768. valBuffer^ := VAL_2;
  9769. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9770. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9771. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
  9772. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9773. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9774. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
  9775. valBuffer^ := VAL_3;
  9776. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9777. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9778. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
  9779. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9780. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9781. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
  9782. end;
  9783. procedure TSDOFloatField_Test.setCurrency();
  9784. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9785. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -98765; VAL_3 : TSDOFloat = 0;
  9786. var
  9787. obj : ISDOField;
  9788. intVal : array[0..100] of Byte;
  9789. buffer, tmpBuffer, attributeBuffer : PByte;
  9790. valBuffer : PSDOFloat;
  9791. begin
  9792. FillChar(intVal,SizeOf(intVal),#0);
  9793. buffer := @intVal;
  9794. tmpBuffer := buffer;
  9795. attributeBuffer := buffer;
  9796. Inc(tmpBuffer);
  9797. valBuffer := PSDOFloat(tmpBuffer);
  9798. obj := Create_Field();
  9799. obj.setCurrency(buffer,F_OFFSET_0,VAL_1);
  9800. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9801. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9802. CheckEquals(VAL_1,valBuffer^);
  9803. obj.setCurrency(buffer,F_OFFSET_0,VAL_2);
  9804. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9805. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9806. CheckEquals(VAL_2,valBuffer^);
  9807. FillChar(intVal,SizeOf(intVal),#0);
  9808. Inc(tmpBuffer);
  9809. Inc(attributeBuffer);
  9810. valBuffer := PSDOFloat(tmpBuffer);
  9811. obj.setCurrency(buffer,F_OFFSET_1,VAL_1);
  9812. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9813. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9814. CheckEquals(VAL_1,valBuffer^);
  9815. obj.setCurrency(buffer,F_OFFSET_1,VAL_2);
  9816. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9817. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9818. CheckEquals(VAL_2,valBuffer^);
  9819. end;
  9820. procedure TSDOFloatField_Test.getDouble();
  9821. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9822. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -987654; VAL_3 : TSDOFloat = 0;
  9823. var
  9824. obj : ISDOField;
  9825. intVal : array[0..100] of Byte;
  9826. buffer, tmpBuffer, attributeBuffer : PByte;
  9827. valBuffer : PSDOFloat;
  9828. begin
  9829. FillChar(intVal,SizeOf(intVal),#0);
  9830. buffer := @intVal;
  9831. tmpBuffer := buffer;
  9832. attributeBuffer := buffer;
  9833. Inc(tmpBuffer);
  9834. valBuffer := PSDOFloat(tmpBuffer);
  9835. obj := Create_Field();
  9836. valBuffer^ := VAL_1;
  9837. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9838. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9839. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  9840. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9841. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9842. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  9843. valBuffer^ := VAL_2;
  9844. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9845. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9846. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  9847. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9848. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9849. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  9850. valBuffer^ := VAL_3;
  9851. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9852. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9853. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  9854. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9855. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9856. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  9857. FillChar(intVal,SizeOf(intVal),#0);
  9858. Inc(tmpBuffer);
  9859. Inc(attributeBuffer);
  9860. valBuffer := PSDOFloat(tmpBuffer);
  9861. valBuffer^ := VAL_1;
  9862. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9863. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9864. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  9865. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9866. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9867. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  9868. valBuffer^ := VAL_2;
  9869. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9870. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9871. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  9872. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9873. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9874. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  9875. valBuffer^ := VAL_3;
  9876. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9877. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9878. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  9879. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9880. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9881. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  9882. end;
  9883. procedure TSDOFloatField_Test.setDouble();
  9884. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9885. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -98765; VAL_3 : TSDOFloat = 0;
  9886. var
  9887. obj : ISDOField;
  9888. intVal : array[0..100] of Byte;
  9889. buffer, tmpBuffer, attributeBuffer : PByte;
  9890. valBuffer : PSDOFloat;
  9891. begin
  9892. FillChar(intVal,SizeOf(intVal),#0);
  9893. buffer := @intVal;
  9894. tmpBuffer := buffer;
  9895. attributeBuffer := buffer;
  9896. Inc(tmpBuffer);
  9897. valBuffer := PSDOFloat(tmpBuffer);
  9898. obj := Create_Field();
  9899. obj.setDouble(buffer,F_OFFSET_0,VAL_1);
  9900. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9901. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9902. CheckEquals(VAL_1,valBuffer^);
  9903. obj.setDouble(buffer,F_OFFSET_0,VAL_2);
  9904. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9905. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9906. CheckEquals(VAL_2,valBuffer^);
  9907. FillChar(intVal,SizeOf(intVal),#0);
  9908. Inc(tmpBuffer);
  9909. Inc(attributeBuffer);
  9910. valBuffer := PSDOFloat(tmpBuffer);
  9911. obj.setDouble(buffer,F_OFFSET_1,VAL_1);
  9912. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9913. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9914. CheckEquals(VAL_1,valBuffer^);
  9915. obj.setDouble(buffer,F_OFFSET_1,VAL_2);
  9916. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9917. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9918. CheckEquals(VAL_2,valBuffer^);
  9919. end;
  9920. procedure TSDOFloatField_Test.getFloat();
  9921. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9922. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -987654; VAL_3 : TSDOFloat = 0;
  9923. var
  9924. obj : ISDOField;
  9925. intVal : array[0..100] of Byte;
  9926. buffer, tmpBuffer, attributeBuffer : PByte;
  9927. valBuffer : PSDOFloat;
  9928. begin
  9929. FillChar(intVal,SizeOf(intVal),#0);
  9930. buffer := @intVal;
  9931. tmpBuffer := buffer;
  9932. attributeBuffer := buffer;
  9933. Inc(tmpBuffer);
  9934. valBuffer := PSDOFloat(tmpBuffer);
  9935. obj := Create_Field();
  9936. valBuffer^ := VAL_1;
  9937. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9938. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9939. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
  9940. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9941. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9942. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
  9943. valBuffer^ := VAL_2;
  9944. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9945. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9946. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
  9947. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9948. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9949. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
  9950. valBuffer^ := VAL_3;
  9951. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9952. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9953. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
  9954. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9955. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9956. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
  9957. FillChar(intVal,SizeOf(intVal),#0);
  9958. Inc(tmpBuffer);
  9959. Inc(attributeBuffer);
  9960. valBuffer := PSDOFloat(tmpBuffer);
  9961. valBuffer^ := VAL_1;
  9962. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9963. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9964. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
  9965. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9966. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9967. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
  9968. valBuffer^ := VAL_2;
  9969. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9970. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9971. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
  9972. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9973. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9974. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
  9975. valBuffer^ := VAL_3;
  9976. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  9977. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9978. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
  9979. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  9980. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  9981. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
  9982. end;
  9983. procedure TSDOFloatField_Test.setFloat();
  9984. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  9985. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -98765; VAL_3 : TSDOFloat = 0;
  9986. var
  9987. obj : ISDOField;
  9988. intVal : array[0..100] of Byte;
  9989. buffer, tmpBuffer, attributeBuffer : PByte;
  9990. valBuffer : PSDOFloat;
  9991. begin
  9992. FillChar(intVal,SizeOf(intVal),#0);
  9993. buffer := @intVal;
  9994. tmpBuffer := buffer;
  9995. attributeBuffer := buffer;
  9996. Inc(tmpBuffer);
  9997. valBuffer := PSDOFloat(tmpBuffer);
  9998. obj := Create_Field();
  9999. obj.setFloat(buffer,F_OFFSET_0,VAL_1);
  10000. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  10001. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  10002. CheckEquals(VAL_1,valBuffer^);
  10003. obj.setFloat(buffer,F_OFFSET_0,VAL_2);
  10004. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  10005. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  10006. CheckEquals(VAL_2,valBuffer^);
  10007. FillChar(intVal,SizeOf(intVal),#0);
  10008. Inc(tmpBuffer);
  10009. Inc(attributeBuffer);
  10010. valBuffer := PSDOFloat(tmpBuffer);
  10011. obj.setFloat(buffer,F_OFFSET_1,VAL_1);
  10012. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  10013. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  10014. CheckEquals(VAL_1,valBuffer^);
  10015. obj.setFloat(buffer,F_OFFSET_1,VAL_2);
  10016. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  10017. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  10018. CheckEquals(VAL_2,valBuffer^);
  10019. end;
  10020. procedure TSDOFloatField_Test.getString();
  10021. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  10022. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -987654; VAL_3 : TSDOFloat = 0;
  10023. var
  10024. obj : ISDOField;
  10025. intVal : array[0..100] of Byte;
  10026. buffer, tmpBuffer, attributeBuffer : PByte;
  10027. valBuffer : PSDOFloat;
  10028. begin
  10029. FillChar(intVal,SizeOf(intVal),#0);
  10030. buffer := @intVal;
  10031. tmpBuffer := buffer;
  10032. attributeBuffer := buffer;
  10033. Inc(tmpBuffer);
  10034. valBuffer := PSDOFloat(tmpBuffer);
  10035. obj := Create_Field();
  10036. valBuffer^ := VAL_1;
  10037. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  10038. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10039. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  10040. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  10041. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10042. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  10043. valBuffer^ := VAL_2;
  10044. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  10045. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10046. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  10047. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  10048. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10049. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  10050. valBuffer^ := VAL_3;
  10051. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  10052. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10053. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  10054. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  10055. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10056. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  10057. FillChar(intVal,SizeOf(intVal),#0);
  10058. Inc(tmpBuffer);
  10059. Inc(attributeBuffer);
  10060. valBuffer := PSDOFloat(tmpBuffer);
  10061. valBuffer^ := VAL_1;
  10062. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  10063. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10064. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  10065. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  10066. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10067. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  10068. valBuffer^ := VAL_2;
  10069. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  10070. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10071. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  10072. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  10073. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10074. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  10075. valBuffer^ := VAL_3;
  10076. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  10077. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10078. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  10079. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  10080. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  10081. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  10082. end;
  10083. procedure TSDOFloatField_Test.setString();
  10084. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  10085. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -98765; VAL_3 : TSDOFloat = 0;
  10086. var
  10087. obj : ISDOField;
  10088. intVal : array[0..100] of Byte;
  10089. buffer, tmpBuffer, attributeBuffer : PByte;
  10090. valBuffer : PSDOFloat;
  10091. begin
  10092. FillChar(intVal,SizeOf(intVal),#0);
  10093. buffer := @intVal;
  10094. tmpBuffer := buffer;
  10095. attributeBuffer := buffer;
  10096. Inc(tmpBuffer);
  10097. valBuffer := PSDOFloat(tmpBuffer);
  10098. obj := Create_Field();
  10099. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.FloatToString(VAL_1));
  10100. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  10101. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  10102. CheckEquals(VAL_1,valBuffer^);
  10103. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.FloatToString(VAL_2));
  10104. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  10105. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  10106. CheckEquals(VAL_2,valBuffer^);
  10107. FillChar(intVal,SizeOf(intVal),#0);
  10108. Inc(tmpBuffer);
  10109. Inc(attributeBuffer);
  10110. valBuffer := PSDOFloat(tmpBuffer);
  10111. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.FloatToString(VAL_1));
  10112. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  10113. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  10114. CheckEquals(VAL_1,valBuffer^);
  10115. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.FloatToString(VAL_2));
  10116. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  10117. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  10118. CheckEquals(VAL_2,valBuffer^);
  10119. end;
  10120. procedure TSDOFloatField_Test.getVariant();
  10121. const
  10122. F_OFFSET = 0;
  10123. SAMPLE_VALUES : array[0..5] of TSDOFloat = (-12345,-678,0,1,12,456789);
  10124. var
  10125. obj : ISDOField;
  10126. intVal : array[0..100] of Byte;
  10127. buffer : PByte;
  10128. v : Variant;
  10129. i : Integer;
  10130. begin
  10131. FillChar(intVal,SizeOf(intVal),#0);
  10132. buffer := @intVal;
  10133. obj := Create_Field();
  10134. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  10135. obj.setFloat(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  10136. v := obj.getVariant(buffer,F_OFFSET);
  10137. CheckEquals(SAMPLE_VALUES[i],TSDOFloat(v));
  10138. end;
  10139. end;
  10140. procedure TSDOFloatField_Test.setVariant();
  10141. const
  10142. F_OFFSET = 0;
  10143. SAMPLE_VALUES : array[0..5] of TSDOFloat = (-12345,-678,0,1,12,456789);
  10144. var
  10145. obj : ISDOField;
  10146. intVal : array[0..100] of Byte;
  10147. buffer : PByte;
  10148. value : Variant;
  10149. i : Integer;
  10150. begin
  10151. FillChar(intVal,SizeOf(intVal),#0);
  10152. buffer := @intVal;
  10153. obj := Create_Field();
  10154. for i := Low(SAMPLE_VALUES) to High(SAMPLE_VALUES) do begin
  10155. obj.setVariant(buffer,F_OFFSET,SAMPLE_VALUES[i]);
  10156. value := obj.getFloat(buffer,F_OFFSET);
  10157. Check((SAMPLE_VALUES[i] = value));
  10158. end;
  10159. end;
  10160. {$ENDIF HAS_SDO_FLOAT}
  10161. initialization
  10162. RegisterTest(TSDOBooleanField_Test.GetTestSuitePath(),TSDOBooleanField_Test.Suite);
  10163. RegisterTest(TSDOIntegerField_Test.GetTestSuitePath(),TSDOIntegerField_Test.Suite);
  10164. {$IFDEF HAS_SDO_LONG}
  10165. RegisterTest(TSDOLongField_Test.GetTestSuitePath(),TSDOLongField_Test.Suite);
  10166. {$ENDIF HAS_SDO_LONG}
  10167. {$IFDEF HAS_SDO_SHORT}
  10168. RegisterTest(TSDOShortField_Test.GetTestSuitePath(),TSDOShortField_Test.Suite);
  10169. {$ENDIF HAS_SDO_SHORT}
  10170. RegisterTest(TSDOStringField_Test.GetTestSuitePath(),TSDOStringField_Test.Suite);
  10171. RegisterTest(TSDOBaseDataObject_Test.GetTestSuitePath(),TSDOBaseDataObject_Test.Suite);
  10172. RegisterTest(TSDOChangeSummaryField_Test.GetTestSuitePath(),TSDOChangeSummaryField_Test.Suite);
  10173. RegisterTest(TSDOByteField_Test.GetTestSuitePath(),TSDOByteField_Test.Suite);
  10174. RegisterTest(TSDODateField_Test.GetTestSuitePath(),TSDODateField_Test.Suite);
  10175. {$IFDEF HAS_SDO_BYTES}
  10176. RegisterTest(TSDOBytesField_Test.GetTestSuitePath(),TSDOBytesField_Test.Suite);
  10177. {$ENDIF HAS_SDO_BYTES}
  10178. {$IFDEF HAS_SDO_CHAR}
  10179. RegisterTest(TSDOCharField_Test.GetTestSuitePath(),TSDOCharField_Test.Suite);
  10180. {$ENDIF HAS_SDO_CHAR}
  10181. {$IFDEF HAS_SDO_CURRENCY}
  10182. RegisterTest(TSDOCurrencyField_Test.GetTestSuitePath(),TSDOCurrencyField_Test.Suite);
  10183. {$ENDIF HAS_SDO_CURRENCY}
  10184. {$IFDEF HAS_SDO_DOUBLE}
  10185. RegisterTest(TSDODoubleField_Test.GetTestSuitePath(),TSDODoubleField_Test.Suite);
  10186. {$ENDIF HAS_SDO_DOUBLE}
  10187. {$IFDEF HAS_SDO_FLOAT}
  10188. RegisterTest(TSDOFloatField_Test.GetTestSuitePath(),TSDOFloatField_Test.Suite);
  10189. {$ENDIF HAS_SDO_FLOAT}
  10190. end.