test_field_imp.pas 373 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272
  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. end;
  42. TSDOIntegerField_Test = class(TSDOField_Test)
  43. protected
  44. function Create_Field() : ISDOField;override;
  45. published
  46. procedure getBoolean();
  47. procedure setBoolean();
  48. procedure getString();
  49. procedure setString();
  50. procedure getInteger();
  51. procedure setInteger();
  52. procedure getByte();
  53. procedure setByte();
  54. procedure getLong();
  55. procedure setLong();
  56. procedure getShort();
  57. procedure setShort();
  58. procedure getCharacter();
  59. procedure setCharacter();
  60. end;
  61. TSDOStringField_Test = class(TSDOField_Test)
  62. protected
  63. function Create_Field() : ISDOField;override;
  64. class procedure CleanUpBuffer(var ABuffer : PPSDOString);
  65. published
  66. procedure getBoolean();
  67. procedure setBoolean();
  68. procedure getString();
  69. procedure setString();
  70. procedure getInteger();
  71. procedure setInteger();
  72. procedure getByte();
  73. procedure setByte();
  74. procedure getLong();
  75. procedure setLong();
  76. procedure getShort();
  77. procedure setShort();
  78. procedure getCharacter();
  79. procedure setCharacter();
  80. procedure unset();override;
  81. procedure setNull();override;
  82. procedure setString_unset_setStrin();
  83. end;
  84. TSDOBaseDataObject_Test = class(TSDOField_Test)
  85. private
  86. FFactory : ISDODataFactory;
  87. protected
  88. class function Create_Factory() : ISDODataFactory;
  89. procedure SetUp(); override;
  90. procedure TearDown(); override;
  91. protected
  92. function Create_Field() : ISDOField;override;
  93. published
  94. procedure getDataObject();
  95. procedure setDataObject();
  96. procedure unset();override;
  97. procedure setNull();override;
  98. end;
  99. TSDOChangeSummaryField_Test = class(TSDOField_Test)
  100. private
  101. FFactory : ISDODataFactory;
  102. protected
  103. class function Create_Factory() : ISDODataFactory;
  104. procedure SetUp(); override;
  105. procedure TearDown(); override;
  106. protected
  107. function Create_Field() : ISDOField;override;
  108. published
  109. procedure getChangeSummary();
  110. procedure setChangeSummary();
  111. procedure unset();override;
  112. procedure setNull();override;
  113. end;
  114. TSDOByteField_Test = class(TSDOField_Test)
  115. protected
  116. function Create_Field() : ISDOField;override;
  117. published
  118. procedure getBoolean();
  119. procedure setBoolean();
  120. procedure getString();
  121. procedure setString();
  122. procedure getInteger();
  123. procedure setInteger();
  124. procedure getByte();
  125. procedure setByte();
  126. procedure getCharacter();
  127. procedure setCharacter();
  128. procedure getLong();
  129. procedure setLong();
  130. procedure getShort();
  131. procedure setShort();
  132. end;
  133. TSDODateField_Test = class(TSDOField_Test)
  134. protected
  135. function Create_Field() : ISDOField;override;
  136. public
  137. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  138. published
  139. procedure getDate();
  140. procedure setDate();
  141. procedure getString();
  142. procedure setString();
  143. end;
  144. {$IFDEF HAS_SDO_BYTES}
  145. TSDOBytesField_Test = class(TSDOField_Test)
  146. protected
  147. function Create_Field() : ISDOField;override;
  148. class procedure CleanUpBuffer(var ABuffer : PPSDOBytes);
  149. published
  150. procedure getBytes();
  151. procedure setBytes();
  152. procedure getString();
  153. procedure setString();
  154. end;
  155. {$ENDIF HAS_SDO_BYTES}
  156. {$IFDEF HAS_SDO_CHAR}
  157. TSDOCharField_Test = class(TSDOField_Test)
  158. protected
  159. function Create_Field() : ISDOField;override;
  160. published
  161. procedure getBoolean();
  162. procedure setBoolean();
  163. procedure getString();
  164. procedure setString();
  165. procedure getInteger();
  166. procedure setInteger();
  167. procedure getByte();
  168. procedure setByte();
  169. procedure getCharacter();
  170. procedure setCharacter();
  171. procedure getLong();
  172. procedure setLong();
  173. procedure getShort();
  174. procedure setShort();
  175. end;
  176. {$ENDIF HAS_SDO_CHAR}
  177. {$IFDEF HAS_SDO_CURRENCY}
  178. TSDOCurrencyField_Test = class(TSDOField_Test)
  179. protected
  180. function Create_Field() : ISDOField;override;
  181. published
  182. procedure getCurrency();
  183. procedure setCurrency();
  184. procedure getDouble();
  185. procedure setDouble();
  186. procedure getFloat();
  187. procedure setFloat();
  188. procedure getString();
  189. procedure setString();
  190. end;
  191. {$ENDIF HAS_SDO_CURRENCY}
  192. {$IFDEF HAS_SDO_DOUBLE}
  193. TSDODoubleField_Test = class(TSDOField_Test)
  194. protected
  195. function Create_Field() : ISDOField;override;
  196. published
  197. procedure getCurrency();
  198. procedure setCurrency();
  199. procedure getDouble();
  200. procedure setDouble();
  201. procedure getFloat();
  202. procedure setFloat();
  203. procedure getString();
  204. procedure setString();
  205. end;
  206. {$ENDIF HAS_SDO_DOUBLE}
  207. {$IFDEF HAS_SDO_FLOAT}
  208. TSDOFloatField_Test = class(TSDOField_Test)
  209. protected
  210. function Create_Field() : ISDOField;override;
  211. published
  212. procedure getCurrency();
  213. procedure setCurrency();
  214. procedure getDouble();
  215. procedure setDouble();
  216. procedure getFloat();
  217. procedure setFloat();
  218. procedure getString();
  219. procedure setString();
  220. end;
  221. {$ENDIF HAS_SDO_FLOAT}
  222. {$IFDEF HAS_SDO_LONG}
  223. TSDOLongField_Test = class(TSDOField_Test)
  224. protected
  225. function Create_Field() : ISDOField;override;
  226. published
  227. procedure getBoolean();
  228. procedure setBoolean();
  229. procedure getString();
  230. procedure setString();
  231. procedure getInteger();
  232. procedure setInteger();
  233. procedure getByte();
  234. procedure setByte();
  235. procedure getCharacter();
  236. procedure setCharacter();
  237. procedure getLong();
  238. procedure setLong();
  239. procedure getShort();
  240. procedure setShort();
  241. end;
  242. {$ENDIF HAS_SDO_LONG}
  243. {$IFDEF HAS_SDO_SHORT}
  244. TSDOShortField_Test = class(TSDOField_Test)
  245. protected
  246. function Create_Field() : ISDOField;override;
  247. published
  248. procedure getBoolean();
  249. procedure setBoolean();
  250. procedure getString();
  251. procedure setString();
  252. procedure getInteger();
  253. procedure setInteger();
  254. procedure getByte();
  255. procedure setByte();
  256. procedure getCharacter();
  257. procedure setCharacter();
  258. procedure getLong();
  259. procedure setLong();
  260. procedure getShort();
  261. procedure setShort();
  262. end;
  263. {$ENDIF HAS_SDO_SHORT}
  264. implementation
  265. uses
  266. sdo_imp_utils, sdo_datafactory, sdo_changesummary, sdo_date_utils, DateUtils,
  267. sdo_convert_helper;
  268. const s_URI_1 = 'uri:1'; s_URI_3 = 'uri:3';
  269. s_TYPE_1 = 'type1'; s_TYPE_2 = 'type2'; s_TYPE_3 = 'type3';
  270. s_PROP_BOOL_1 = 'propboolean1'; s_PROP_INTEGER_1 = 'propinteger1';
  271. s_PROP_BOOL_2 = 'propboolean2'; s_PROP_INTEGER_2 = 'propinteger2';
  272. s_PROP_STR_1 = 'propStr1'; s_PROP_STR_2 = 'propStr2';
  273. s_PROP_OBJ_CONT = 'propobj_cont'; s_PROP_OBJ_REF = 'propobj_ref';
  274. s_PROP_BOOL_A = 'propbooleanA'; s_PROP_INTEGER_A = 'propintegerA';
  275. s_PROP_STR_A = 'propStrA';
  276. s_PROP_CHANGE_SUMMARY = 'propChangeSummary';
  277. { TSDOBooleanField_Test }
  278. function TSDOBooleanField_Test.Create_Field() : ISDOField;
  279. begin
  280. Result := TSDOBooleanField.Create();
  281. end;
  282. procedure TSDOBooleanField_Test.getBoolean();
  283. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  284. var
  285. obj : ISDOField;
  286. intVal : DWord;
  287. buffer, valBuffer, attributeBuffer : PByte;
  288. begin
  289. intVal := 0;
  290. buffer := @intVal;
  291. valBuffer := buffer;
  292. attributeBuffer := buffer;
  293. Inc(valBuffer);
  294. obj := Create_Field();
  295. valBuffer^ := 1;
  296. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  297. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  298. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  299. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  300. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  301. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  302. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  303. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  304. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  305. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  306. valBuffer^ := 0;
  307. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  308. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  309. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  310. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  311. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  312. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  313. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  314. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  315. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  316. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  317. intVal := 0;
  318. Inc(valBuffer);
  319. Inc(attributeBuffer);
  320. valBuffer^ := 1;
  321. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  322. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  323. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  324. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  325. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  326. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  327. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  328. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  329. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  330. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  331. valBuffer^ := 0;
  332. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  333. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  334. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  335. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  336. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  337. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  338. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  339. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  340. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  341. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  342. end;
  343. procedure TSDOBooleanField_Test.getByte();
  344. const F_OFFSET = 0;
  345. var
  346. obj : ISDOField;
  347. intVal : DWord;
  348. buffer, valBuffer, attributeBuffer : PByte;
  349. begin
  350. intVal := 0;
  351. buffer := @intVal;
  352. attributeBuffer := buffer;
  353. valBuffer := buffer;
  354. Inc(valBuffer);
  355. obj := Create_Field();
  356. valBuffer^ := 1;
  357. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  358. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  359. CheckEquals(1,obj.getByte(buffer,F_OFFSET));
  360. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  361. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  362. CheckEquals(1,obj.getByte(buffer,F_OFFSET));
  363. valBuffer^ := 0;
  364. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  365. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  366. CheckEquals(0,obj.getByte(buffer,F_OFFSET));
  367. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  368. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  369. CheckEquals(0,obj.getByte(buffer,F_OFFSET));
  370. valBuffer^ := 1;
  371. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  372. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  373. CheckEquals(1,obj.getByte(buffer,F_OFFSET));
  374. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  375. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  376. CheckEquals(1,obj.getByte(buffer,F_OFFSET));
  377. end;
  378. procedure TSDOBooleanField_Test.getCharacter();
  379. const F_OFFSET = 0;
  380. var
  381. obj : ISDOField;
  382. intVal : DWord;
  383. buffer, valBuffer, attributeBuffer : PByte;
  384. begin
  385. intVal := 0;
  386. buffer := @intVal;
  387. attributeBuffer := buffer;
  388. valBuffer := buffer;
  389. Inc(valBuffer);
  390. obj := Create_Field();
  391. valBuffer^ := 1;
  392. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  393. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  394. CheckEquals('1',obj.getCharacter(buffer,F_OFFSET));
  395. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  396. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  397. CheckEquals('1',obj.getCharacter(buffer,F_OFFSET));
  398. valBuffer^ := 0;
  399. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  400. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  401. CheckEquals('0',obj.getCharacter(buffer,F_OFFSET));
  402. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  403. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  404. CheckEquals('0',obj.getCharacter(buffer,F_OFFSET));
  405. valBuffer^ := 1;
  406. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  407. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  408. CheckEquals('1',obj.getCharacter(buffer,F_OFFSET));
  409. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  410. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  411. CheckEquals('1',obj.getCharacter(buffer,F_OFFSET));
  412. end;
  413. procedure TSDOBooleanField_Test.getInteger();
  414. const F_OFFSET = 0;
  415. var
  416. obj : ISDOField;
  417. intVal : DWord;
  418. buffer, valBuffer, attributeBuffer : PByte;
  419. begin
  420. intVal := 0;
  421. buffer := @intVal;
  422. attributeBuffer := buffer;
  423. valBuffer := buffer;
  424. Inc(valBuffer);
  425. obj := Create_Field();
  426. valBuffer^ := 1;
  427. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  428. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  429. CheckEquals(1,obj.getInteger(buffer,F_OFFSET));
  430. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  431. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  432. CheckEquals(1,obj.getInteger(buffer,F_OFFSET));
  433. valBuffer^ := 0;
  434. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  435. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  436. CheckEquals(0,obj.getInteger(buffer,F_OFFSET));
  437. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  438. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  439. CheckEquals(0,obj.getInteger(buffer,F_OFFSET));
  440. valBuffer^ := 1;
  441. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  442. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  443. CheckEquals(1,obj.getInteger(buffer,F_OFFSET));
  444. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  445. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  446. CheckEquals(1,obj.getInteger(buffer,F_OFFSET));
  447. end;
  448. procedure TSDOBooleanField_Test.getLong();
  449. const F_OFFSET = 0;
  450. var
  451. obj : ISDOField;
  452. intVal : DWord;
  453. buffer, valBuffer, attributeBuffer : PByte;
  454. begin
  455. intVal := 0;
  456. buffer := @intVal;
  457. attributeBuffer := buffer;
  458. valBuffer := buffer;
  459. Inc(valBuffer);
  460. obj := Create_Field();
  461. valBuffer^ := 1;
  462. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  463. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  464. CheckEquals(1,obj.getLong(buffer,F_OFFSET));
  465. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  466. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  467. CheckEquals(1,obj.getLong(buffer,F_OFFSET));
  468. valBuffer^ := 0;
  469. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  470. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  471. CheckEquals(0,obj.getLong(buffer,F_OFFSET));
  472. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  473. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  474. CheckEquals(0,obj.getLong(buffer,F_OFFSET));
  475. valBuffer^ := 1;
  476. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  477. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  478. CheckEquals(1,obj.getLong(buffer,F_OFFSET));
  479. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  480. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  481. CheckEquals(1,obj.getLong(buffer,F_OFFSET));
  482. end;
  483. procedure TSDOBooleanField_Test.getShort();
  484. const F_OFFSET = 0;
  485. var
  486. obj : ISDOField;
  487. intVal : DWord;
  488. buffer, valBuffer, attributeBuffer : PByte;
  489. begin
  490. intVal := 0;
  491. buffer := @intVal;
  492. attributeBuffer := buffer;
  493. valBuffer := buffer;
  494. Inc(valBuffer);
  495. obj := Create_Field();
  496. valBuffer^ := 1;
  497. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  498. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  499. CheckEquals(1,obj.getShort(buffer,F_OFFSET));
  500. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  501. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  502. CheckEquals(1,obj.getShort(buffer,F_OFFSET));
  503. valBuffer^ := 0;
  504. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  505. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  506. CheckEquals(0,obj.getShort(buffer,F_OFFSET));
  507. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  508. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  509. CheckEquals(0,obj.getShort(buffer,F_OFFSET));
  510. valBuffer^ := 1;
  511. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  512. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  513. CheckEquals(1,obj.getShort(buffer,F_OFFSET));
  514. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  515. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  516. CheckEquals(1,obj.getShort(buffer,F_OFFSET));
  517. end;
  518. procedure TSDOBooleanField_Test.getString();
  519. const F_OFFSET = 0;
  520. var
  521. obj : ISDOField;
  522. intVal : DWord;
  523. buffer, valBuffer, attributeBuffer : PByte;
  524. begin
  525. intVal := 0;
  526. buffer := @intVal;
  527. attributeBuffer := buffer;
  528. valBuffer := buffer;
  529. Inc(valBuffer);
  530. obj := Create_Field();
  531. valBuffer^ := 1;
  532. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  533. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  534. CheckEquals('1',obj.getString(buffer,F_OFFSET));
  535. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  536. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  537. CheckEquals('1',obj.getString(buffer,F_OFFSET));
  538. valBuffer^ := 0;
  539. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  540. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  541. CheckEquals('0',obj.getString(buffer,F_OFFSET));
  542. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  543. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  544. CheckEquals('0',obj.getString(buffer,F_OFFSET));
  545. valBuffer^ := 1;
  546. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  547. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  548. CheckEquals('1',obj.getString(buffer,F_OFFSET));
  549. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  550. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  551. CheckEquals('1',obj.getString(buffer,F_OFFSET));
  552. end;
  553. procedure TSDOBooleanField_Test.setBoolean();
  554. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  555. var
  556. obj : ISDOField;
  557. intVal : DWord;
  558. buffer, valBuffer, attributeBuffer: PByte;
  559. begin
  560. intVal := 0;
  561. buffer := @intVal;
  562. valBuffer := buffer;
  563. attributeBuffer := buffer;
  564. Inc(valBuffer);
  565. obj := Create_Field();
  566. obj.setBoolean(buffer,F_OFFSET_0,True);
  567. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  568. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  569. CheckEquals(1,valBuffer^);
  570. obj.setBoolean(buffer,F_OFFSET_0,False);
  571. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  572. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  573. CheckEquals(0,valBuffer^);
  574. intVal := 0;
  575. Inc(valBuffer);
  576. Inc(attributeBuffer);
  577. obj.setBoolean(buffer,F_OFFSET_1,True);
  578. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  579. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  580. CheckEquals(1,valBuffer^);
  581. obj.setBoolean(buffer,F_OFFSET_1,False);
  582. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  583. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  584. CheckEquals(0,valBuffer^);
  585. end;
  586. procedure TSDOBooleanField_Test.setByte();
  587. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  588. var
  589. obj : ISDOField;
  590. intVal : DWord;
  591. buffer, valBuffer, attributeBuffer : PByte;
  592. begin
  593. intVal := 0;
  594. buffer := @intVal;
  595. valBuffer := buffer;
  596. attributeBuffer := buffer;
  597. Inc(valBuffer);
  598. obj := Create_Field();
  599. obj.setByte(buffer,F_OFFSET_0,1);
  600. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  601. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  602. CheckEquals(1,valBuffer^);
  603. obj.setByte(buffer,F_OFFSET_0,0);
  604. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  605. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  606. CheckEquals(0,valBuffer^);
  607. intVal := 0;
  608. Inc(valBuffer);
  609. Inc(attributeBuffer);
  610. obj.setByte(buffer,F_OFFSET_1,123);
  611. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  612. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  613. CheckEquals(1,valBuffer^);
  614. obj.setByte(buffer,F_OFFSET_1,0);
  615. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  616. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  617. CheckEquals(0,valBuffer^);
  618. end;
  619. procedure TSDOBooleanField_Test.setCharacter();
  620. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  621. var
  622. obj : ISDOField;
  623. intVal : DWord;
  624. buffer, valBuffer, attributeBuffer : PByte;
  625. begin
  626. intVal := 0;
  627. buffer := @intVal;
  628. attributeBuffer := buffer;
  629. valBuffer := buffer;
  630. Inc(valBuffer);
  631. obj := Create_Field();
  632. obj.setCharacter(buffer,F_OFFSET_0,'T');
  633. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  634. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  635. CheckEquals(1,valBuffer^);
  636. obj.setCharacter(buffer,F_OFFSET_0,#0);
  637. CheckEquals(0,valBuffer^);
  638. intVal := 0;
  639. Inc(valBuffer);
  640. Inc(attributeBuffer);
  641. obj.setCharacter(buffer,F_OFFSET_1,'T');
  642. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  643. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  644. CheckEquals(1,valBuffer^);
  645. obj.setCharacter(buffer,F_OFFSET_1,#0);
  646. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  647. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  648. CheckEquals(0,valBuffer^);
  649. end;
  650. procedure TSDOBooleanField_Test.setInteger();
  651. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  652. var
  653. obj : ISDOField;
  654. intVal : DWord;
  655. buffer, valBuffer, attributeBuffer : PByte;
  656. begin
  657. intVal := 0;
  658. buffer := @intVal;
  659. valBuffer := buffer;
  660. attributeBuffer := buffer;
  661. Inc(valBuffer);
  662. obj := Create_Field();
  663. obj.setInteger(buffer,F_OFFSET_0,1);
  664. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  665. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  666. CheckEquals(1,valBuffer^);
  667. obj.setInteger(buffer,F_OFFSET_0,0);
  668. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  669. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  670. CheckEquals(0,valBuffer^);
  671. intVal := 0;
  672. Inc(valBuffer);
  673. Inc(attributeBuffer);
  674. obj.setInteger(buffer,F_OFFSET_1,300);
  675. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  676. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  677. CheckEquals(1,valBuffer^);
  678. obj.setInteger(buffer,F_OFFSET_1,0);
  679. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  680. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  681. CheckEquals(0,valBuffer^);
  682. end;
  683. procedure TSDOBooleanField_Test.setLong();
  684. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  685. var
  686. obj : ISDOField;
  687. intVal : DWord;
  688. buffer, valBuffer, attributeBuffer : PByte;
  689. begin
  690. intVal := 0;
  691. buffer := @intVal;
  692. valBuffer := buffer;
  693. attributeBuffer := buffer;
  694. Inc(valBuffer);
  695. obj := Create_Field();
  696. obj.setLong(buffer,F_OFFSET_0,1);
  697. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  698. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  699. CheckEquals(1,valBuffer^);
  700. obj.setLong(buffer,F_OFFSET_0,0);
  701. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  702. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  703. CheckEquals(0,valBuffer^);
  704. intVal := 0;
  705. Inc(valBuffer);
  706. Inc(attributeBuffer);
  707. obj.setLong(buffer,F_OFFSET_1,123);
  708. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  709. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  710. CheckEquals(1,valBuffer^);
  711. obj.setLong(buffer,F_OFFSET_1,0);
  712. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  713. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  714. CheckEquals(0,valBuffer^);
  715. end;
  716. procedure TSDOBooleanField_Test.setShort();
  717. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  718. var
  719. obj : ISDOField;
  720. intVal : DWord;
  721. buffer, valBuffer, attributeBuffer : PByte;
  722. begin
  723. intVal := 0;
  724. buffer := @intVal;
  725. valBuffer := buffer;
  726. attributeBuffer := buffer;
  727. Inc(valBuffer);
  728. obj := Create_Field();
  729. obj.setShort(buffer,F_OFFSET_0,1);
  730. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  731. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  732. CheckEquals(1,valBuffer^);
  733. obj.setShort(buffer,F_OFFSET_0,0);
  734. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  735. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  736. CheckEquals(0,valBuffer^);
  737. intVal := 0;
  738. Inc(valBuffer);
  739. Inc(attributeBuffer);
  740. obj.setShort(buffer,F_OFFSET_1,123);
  741. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  742. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  743. CheckEquals(1,valBuffer^);
  744. obj.setShort(buffer,F_OFFSET_1,0);
  745. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  746. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  747. CheckEquals(0,valBuffer^);
  748. end;
  749. procedure TSDOBooleanField_Test.setString();
  750. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  751. var
  752. obj : ISDOField;
  753. intVal : DWord;
  754. buffer, valBuffer, attributeBuffer : PByte;
  755. begin
  756. intVal := 0;
  757. buffer := @intVal;
  758. attributeBuffer := buffer;
  759. valBuffer := buffer;
  760. Inc(valBuffer);
  761. obj := Create_Field();
  762. obj.setString(buffer,F_OFFSET_0,'True');
  763. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  764. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  765. CheckEquals(1,valBuffer^);
  766. obj.setString(buffer,F_OFFSET_0,'False');
  767. CheckEquals(0,valBuffer^);
  768. intVal := 0;
  769. Inc(valBuffer);
  770. Inc(attributeBuffer);
  771. obj.setString(buffer,F_OFFSET_1,'True');
  772. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  773. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  774. CheckEquals(1,valBuffer^);
  775. obj.setString(buffer,F_OFFSET_1,'False');
  776. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  777. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  778. CheckEquals(0,valBuffer^);
  779. end;
  780. { TSDOField_Test }
  781. class function TSDOField_Test.GetTestSuitePath: string;
  782. begin
  783. Result := 'Field';
  784. end;
  785. procedure TSDOField_Test.isNull();
  786. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  787. var
  788. obj : ISDOField;
  789. intVal : DWord;
  790. buffer, valBuffer : PByte;
  791. begin
  792. intVal := 0;
  793. buffer := @intVal;
  794. valBuffer := buffer;
  795. obj := Create_Field();
  796. valBuffer^ := 0;
  797. SetBit(valBuffer^,BIT_ORDER_SET,True);
  798. SetBit(valBuffer^,BIT_ORDER_NULL,True);
  799. CheckEquals(True,obj.isSet(buffer,F_OFFSET_0));
  800. CheckEquals(True,obj.isNull(buffer,F_OFFSET_0));
  801. valBuffer^ := 0;
  802. CheckEquals(False,obj.isSet(buffer,F_OFFSET_0));
  803. CheckEquals(False,obj.isNull(buffer,F_OFFSET_0));
  804. valBuffer^ := 0;
  805. SetBit(valBuffer^,BIT_ORDER_SET,False);
  806. SetBit(valBuffer^,BIT_ORDER_NULL,True);
  807. CheckEquals(False,obj.isSet(buffer,F_OFFSET_0));
  808. CheckEquals(True,obj.isNull(buffer,F_OFFSET_0));
  809. intVal := 0;
  810. Inc(valBuffer);
  811. valBuffer^ := 0;
  812. SetBit(valBuffer^,BIT_ORDER_SET,True);
  813. SetBit(valBuffer^,BIT_ORDER_NULL,True);
  814. CheckEquals(True,obj.isSet(buffer,F_OFFSET_1));
  815. CheckEquals(True,obj.isNull(buffer,F_OFFSET_1));
  816. valBuffer^ := 0;
  817. CheckEquals(False,obj.isSet(buffer,F_OFFSET_1));
  818. CheckEquals(False,obj.isNull(buffer,F_OFFSET_1));
  819. valBuffer^ := 0;
  820. SetBit(valBuffer^,BIT_ORDER_SET,False);
  821. SetBit(valBuffer^,BIT_ORDER_NULL,True);
  822. CheckEquals(False,obj.isSet(buffer,F_OFFSET_1));
  823. CheckEquals(True,obj.isNull(buffer,F_OFFSET_1));
  824. end;
  825. procedure TSDOField_Test.isSet();
  826. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  827. var
  828. obj : ISDOField;
  829. intVal : DWord;
  830. buffer, valBuffer : PByte;
  831. begin
  832. intVal := 0;
  833. buffer := @intVal;
  834. valBuffer := buffer;
  835. obj := Create_Field();
  836. SetBit(valBuffer^,BIT_ORDER_SET,True);// valBuffer^ := 2;
  837. CheckEquals(True,obj.isSet(buffer,F_OFFSET_0));
  838. valBuffer^ := 0;
  839. CheckEquals(False,obj.isSet(buffer,F_OFFSET_0));
  840. intVal := 0;
  841. Inc(valBuffer);
  842. SetBit(valBuffer^,BIT_ORDER_SET,True);
  843. SetBit(valBuffer^,BIT_ORDER_SET + 1,True); //valBuffer^ := 6;
  844. CheckEquals(True,obj.isSet(buffer,F_OFFSET_1));
  845. valBuffer^ := 0;
  846. CheckEquals(False,obj.isSet(buffer,F_OFFSET_1));
  847. end;
  848. procedure TSDOField_Test.setNull();
  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. obj.setNull(buffer,F_OFFSET_0);
  860. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET));
  861. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_NULL));
  862. SetBit(valBuffer^,BIT_ORDER_SET,True);
  863. SetBit(valBuffer^,BIT_ORDER_SET,False);
  864. obj.setNull(buffer,F_OFFSET_0);
  865. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET));
  866. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_NULL));
  867. intVal := 0;
  868. Inc(valBuffer);
  869. obj.setNull(buffer,F_OFFSET_1);
  870. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET));
  871. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_NULL));
  872. SetBit(valBuffer^,BIT_ORDER_SET,True);
  873. SetBit(valBuffer^,BIT_ORDER_SET,False);
  874. obj.setNull(buffer,F_OFFSET_1);
  875. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET));
  876. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_NULL));
  877. end;
  878. procedure TSDOField_Test.unset();
  879. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  880. var
  881. obj : ISDOField;
  882. intVal : DWord;
  883. buffer, valBuffer : PByte;
  884. begin
  885. intVal := 0;
  886. buffer := @intVal;
  887. valBuffer := buffer;
  888. obj := Create_Field();
  889. obj.unset(buffer,F_OFFSET_0);
  890. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  891. SetBit(valBuffer^,BIT_ORDER_SET,True);//valBuffer^ := 2;
  892. obj.unset(buffer,F_OFFSET_0);
  893. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  894. SetBit(valBuffer^,BIT_ORDER_SET,True);//valBuffer^ := 6;
  895. SetBit(valBuffer^,BIT_ORDER_SET + 1,True);
  896. obj.unset(buffer,F_OFFSET_0);
  897. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  898. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET + 1));
  899. intVal := 0;
  900. Inc(valBuffer);
  901. obj.unset(buffer,F_OFFSET_1);
  902. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  903. SetBit(valBuffer^,BIT_ORDER_SET,True);//valBuffer^ := 2;
  904. obj.unset(buffer,F_OFFSET_1);
  905. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  906. SetBit(valBuffer^,BIT_ORDER_SET,True);//valBuffer^ := 6;
  907. SetBit(valBuffer^,BIT_ORDER_SET + 1,True);//
  908. obj.unset(buffer,F_OFFSET_1);
  909. CheckEquals(False,IsBitON(valBuffer^,BIT_ORDER_SET));
  910. CheckEquals(True,IsBitON(valBuffer^,BIT_ORDER_SET + 1));
  911. end;
  912. { TSDOIntegerField_Test }
  913. function TSDOIntegerField_Test.Create_Field() : ISDOField;
  914. begin
  915. Result := TSDOIntegerField.Create();
  916. end;
  917. procedure TSDOIntegerField_Test.getBoolean();
  918. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  919. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  920. var
  921. obj : ISDOField;
  922. intVal : QWord;
  923. buffer, tmpBuffer, attributeBuffer : PByte;
  924. valBuffer : PSDOInteger;
  925. begin
  926. intVal := 0;
  927. buffer := @intVal;
  928. tmpBuffer := buffer;
  929. attributeBuffer := buffer;
  930. Inc(tmpBuffer);
  931. valBuffer := PSDOInteger(tmpBuffer);
  932. obj := Create_Field();
  933. valBuffer^ := VAL_1;
  934. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  935. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  936. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  937. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  938. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  939. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  940. valBuffer^ := VAL_2;
  941. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  942. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  943. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  944. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  945. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  946. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  947. valBuffer^ := VAL_3;
  948. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  949. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  950. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  951. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  952. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  953. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  954. intVal := 0;
  955. Inc(tmpBuffer);
  956. Inc(attributeBuffer);
  957. valBuffer := PSDOInteger(tmpBuffer);
  958. valBuffer^ := VAL_1;
  959. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  960. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  961. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  962. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  963. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  964. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  965. valBuffer^ := VAL_2;
  966. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  967. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  968. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  969. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  970. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  971. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  972. valBuffer^ := VAL_3;
  973. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  974. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  975. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  976. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  977. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  978. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  979. end;
  980. procedure TSDOIntegerField_Test.getByte();
  981. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  982. VAL_1 = 123; VAL_2 = 45; 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,True);
  999. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1000. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1001. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  1002. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1003. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1004. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1005. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1006. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  1007. valBuffer^ := VAL_2;
  1008. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1009. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1010. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1011. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1012. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  1013. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1014. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1015. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1016. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1017. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  1018. valBuffer^ := VAL_3;
  1019. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1020. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1021. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1022. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1023. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  1024. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1025. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1026. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  1027. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1028. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  1029. intVal := 0;
  1030. Inc(tmpBuffer);
  1031. Inc(attributeBuffer);
  1032. valBuffer := PSDOInteger(tmpBuffer);
  1033. valBuffer^ := VAL_1;
  1034. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1035. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1036. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1037. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1038. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  1039. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1040. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1041. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1042. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1043. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  1044. valBuffer^ := VAL_2;
  1045. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1046. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1047. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1048. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1049. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  1050. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1051. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1052. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1053. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1054. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  1055. valBuffer^ := VAL_3;
  1056. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1057. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1058. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1059. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1060. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  1061. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1062. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1063. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  1064. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1065. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  1066. end;
  1067. procedure TSDOIntegerField_Test.getCharacter();
  1068. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1069. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  1070. var
  1071. obj : ISDOField;
  1072. intVal : QWord;
  1073. buffer, tmpBuffer, attributeBuffer : PByte;
  1074. valBuffer : PSDOInteger;
  1075. begin
  1076. intVal := 0;
  1077. buffer := @intVal;
  1078. tmpBuffer := buffer;
  1079. attributeBuffer := buffer;
  1080. Inc(tmpBuffer);
  1081. valBuffer := PSDOInteger(tmpBuffer);
  1082. obj := Create_Field();
  1083. valBuffer^ := VAL_1;
  1084. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1085. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1086. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  1087. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1088. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1089. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  1090. valBuffer^ := VAL_2;
  1091. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1092. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1093. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  1094. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1095. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1096. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  1097. valBuffer^ := VAL_3;
  1098. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1099. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1100. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  1101. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1102. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1103. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  1104. intVal := 0;
  1105. Inc(tmpBuffer);
  1106. Inc(attributeBuffer);
  1107. valBuffer := PSDOInteger(tmpBuffer);
  1108. valBuffer^ := VAL_1;
  1109. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1110. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1111. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  1112. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1113. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1114. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  1115. valBuffer^ := VAL_2;
  1116. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1117. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1118. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  1119. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1120. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1121. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  1122. valBuffer^ := VAL_3;
  1123. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1124. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1125. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  1126. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1127. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1128. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  1129. end;
  1130. procedure TSDOIntegerField_Test.getInteger();
  1131. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1132. VAL_1 = 12345; VAL_2 = -9876; 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,False);
  1148. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1149. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1150. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1151. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  1152. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1153. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1154. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1155. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1156. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  1157. valBuffer^ := VAL_2;
  1158. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1159. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1160. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1161. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1162. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  1163. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1164. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1165. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1166. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1167. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  1168. valBuffer^ := VAL_3;
  1169. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1170. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1171. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1172. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1173. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  1174. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1175. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1176. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  1177. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1178. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  1179. intVal := 0;
  1180. Inc(tmpBuffer);
  1181. Inc(attributeBuffer);
  1182. valBuffer := PSDOInteger(tmpBuffer);
  1183. valBuffer^ := VAL_1;
  1184. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1185. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1186. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1187. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1188. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  1189. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1190. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1191. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1192. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1193. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  1194. valBuffer^ := VAL_2;
  1195. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1196. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1197. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1198. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1199. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  1200. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1201. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1202. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1203. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1204. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  1205. valBuffer^ := VAL_3;
  1206. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1207. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1208. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1209. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1210. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  1211. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1212. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1213. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  1214. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1215. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  1216. end;
  1217. procedure TSDOIntegerField_Test.getLong();
  1218. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1219. VAL_1 = 12345; VAL_2 = -98765; VAL_3 = 0;
  1220. var
  1221. obj : ISDOField;
  1222. intVal : QWord;
  1223. buffer, tmpBuffer, attributeBuffer : PByte;
  1224. valBuffer : PSDOInteger;
  1225. begin
  1226. intVal := 0;
  1227. buffer := @intVal;
  1228. tmpBuffer := buffer;
  1229. attributeBuffer := buffer;
  1230. Inc(tmpBuffer);
  1231. valBuffer := PSDOInteger(tmpBuffer);
  1232. obj := Create_Field();
  1233. valBuffer^ := VAL_1;
  1234. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1235. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1236. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1237. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1238. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  1239. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1240. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1241. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1242. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1243. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  1244. valBuffer^ := VAL_2;
  1245. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1246. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1247. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1248. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1249. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  1250. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1251. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1252. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1253. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1254. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  1255. valBuffer^ := VAL_3;
  1256. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1257. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1258. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1259. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1260. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  1261. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1262. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1263. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  1264. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1265. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  1266. intVal := 0;
  1267. Inc(tmpBuffer);
  1268. Inc(attributeBuffer);
  1269. valBuffer := PSDOInteger(tmpBuffer);
  1270. valBuffer^ := VAL_1;
  1271. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1272. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1273. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1274. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1275. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  1276. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1277. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1278. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1279. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1280. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  1281. valBuffer^ := VAL_2;
  1282. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1283. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1284. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1285. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1286. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  1287. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1288. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1289. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1290. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1291. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  1292. valBuffer^ := VAL_3;
  1293. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1294. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1295. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1296. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1297. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  1298. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1299. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1300. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  1301. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1302. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  1303. end;
  1304. procedure TSDOIntegerField_Test.getShort();
  1305. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1306. VAL_1 = 1234; VAL_2 = -987; VAL_3 = 0;
  1307. var
  1308. obj : ISDOField;
  1309. intVal : QWord;
  1310. buffer, tmpBuffer, attributeBuffer : PByte;
  1311. valBuffer : PSDOInteger;
  1312. begin
  1313. intVal := 0;
  1314. buffer := @intVal;
  1315. tmpBuffer := buffer;
  1316. attributeBuffer := buffer;
  1317. Inc(tmpBuffer);
  1318. valBuffer := PSDOInteger(tmpBuffer);
  1319. obj := Create_Field();
  1320. valBuffer^ := VAL_1;
  1321. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1322. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1323. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1324. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1325. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  1326. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1327. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1328. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1329. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1330. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  1331. valBuffer^ := VAL_2;
  1332. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1333. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1334. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1335. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1336. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  1337. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1338. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1339. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1340. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1341. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  1342. valBuffer^ := VAL_3;
  1343. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1344. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1345. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1346. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1347. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  1348. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1349. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1350. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  1351. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1352. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  1353. intVal := 0;
  1354. Inc(tmpBuffer);
  1355. Inc(attributeBuffer);
  1356. valBuffer := PSDOInteger(tmpBuffer);
  1357. valBuffer^ := VAL_1;
  1358. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1359. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1360. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1361. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1362. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  1363. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1364. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1365. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1366. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1367. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  1368. valBuffer^ := VAL_2;
  1369. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1370. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1371. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1372. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1373. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  1374. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1375. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1376. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1377. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1378. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  1379. valBuffer^ := VAL_3;
  1380. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1381. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1382. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1383. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1384. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  1385. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1386. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  1387. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  1388. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1389. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  1390. end;
  1391. procedure TSDOIntegerField_Test.getString();
  1392. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1393. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1394. var
  1395. obj : ISDOField;
  1396. intVal : QWord;
  1397. buffer, tmpBuffer, attributeBuffer : PByte;
  1398. valBuffer : PSDOInteger;
  1399. begin
  1400. intVal := 0;
  1401. buffer := @intVal;
  1402. tmpBuffer := buffer;
  1403. attributeBuffer := buffer;
  1404. Inc(tmpBuffer);
  1405. valBuffer := PSDOInteger(tmpBuffer);
  1406. obj := Create_Field();
  1407. valBuffer^ := VAL_1;
  1408. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1409. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1410. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  1411. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1412. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1413. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  1414. valBuffer^ := VAL_2;
  1415. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1416. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1417. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  1418. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1419. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1420. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  1421. valBuffer^ := VAL_3;
  1422. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1423. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1424. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  1425. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1426. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1427. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  1428. intVal := 0;
  1429. Inc(tmpBuffer);
  1430. Inc(attributeBuffer);
  1431. valBuffer := PSDOInteger(tmpBuffer);
  1432. valBuffer^ := VAL_1;
  1433. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1434. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1435. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  1436. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1437. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1438. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  1439. valBuffer^ := VAL_2;
  1440. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1441. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1442. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  1443. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1444. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1445. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  1446. valBuffer^ := VAL_3;
  1447. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  1448. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1449. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  1450. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  1451. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  1452. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  1453. end;
  1454. procedure TSDOIntegerField_Test.setBoolean();
  1455. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1456. var
  1457. obj : ISDOField;
  1458. intVal : QWord;
  1459. buffer, tmpBuffer, attributeBuffer : PByte;
  1460. valBuffer : PSDOInteger;
  1461. begin
  1462. intVal := 0;
  1463. buffer := @intVal;
  1464. tmpBuffer := buffer;
  1465. attributeBuffer := buffer;
  1466. Inc(tmpBuffer);
  1467. valBuffer := PSDOInteger(tmpBuffer);
  1468. obj := Create_Field();
  1469. obj.setBoolean(buffer,F_OFFSET_0,True);
  1470. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1471. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1472. CheckEquals(1,valBuffer^);
  1473. obj.setBoolean(buffer,F_OFFSET_0,False);
  1474. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1475. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1476. CheckEquals(0,valBuffer^);
  1477. intVal := 0;
  1478. Inc(tmpBuffer);
  1479. Inc(attributeBuffer);
  1480. valBuffer := PSDOInteger(tmpBuffer);
  1481. obj.setBoolean(buffer,F_OFFSET_1,True);
  1482. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1483. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1484. CheckEquals(1,valBuffer^);
  1485. obj.setBoolean(buffer,F_OFFSET_1,False);
  1486. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1487. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1488. CheckEquals(0,valBuffer^);
  1489. end;
  1490. procedure TSDOIntegerField_Test.setByte();
  1491. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1492. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  1493. var
  1494. obj : ISDOField;
  1495. intVal : QWord;
  1496. buffer, tmpBuffer, attributeBuffer : PByte;
  1497. valBuffer : PSDOInteger;
  1498. begin
  1499. intVal := 0;
  1500. buffer := @intVal;
  1501. tmpBuffer := buffer;
  1502. attributeBuffer := buffer;
  1503. Inc(tmpBuffer);
  1504. valBuffer := PSDOInteger(tmpBuffer);
  1505. obj := Create_Field();
  1506. obj.setByte(buffer,F_OFFSET_0,VAL_1);
  1507. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1508. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1509. CheckEquals(VAL_1,valBuffer^);
  1510. obj.setByte(buffer,F_OFFSET_0,VAL_2);
  1511. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1512. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1513. CheckEquals(VAL_2,valBuffer^);
  1514. obj.setByte(buffer,F_OFFSET_0,VAL_3);
  1515. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1516. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1517. CheckEquals(VAL_3,valBuffer^);
  1518. intVal := 0;
  1519. Inc(tmpBuffer);
  1520. Inc(attributeBuffer);
  1521. valBuffer := PSDOInteger(tmpBuffer);
  1522. obj.setByte(buffer,F_OFFSET_1,VAL_1);
  1523. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1524. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1525. CheckEquals(VAL_1,valBuffer^);
  1526. obj.setByte(buffer,F_OFFSET_1,VAL_2);
  1527. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1528. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1529. CheckEquals(VAL_2,valBuffer^);
  1530. obj.setByte(buffer,F_OFFSET_1,VAL_3);
  1531. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1532. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1533. CheckEquals(VAL_3,valBuffer^);
  1534. end;
  1535. procedure TSDOIntegerField_Test.setCharacter();
  1536. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1537. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  1538. var
  1539. obj : ISDOField;
  1540. intVal : QWord;
  1541. buffer, tmpBuffer, attributeBuffer : PByte;
  1542. valBuffer : PSDOInteger;
  1543. begin
  1544. intVal := 0;
  1545. buffer := @intVal;
  1546. tmpBuffer := buffer;
  1547. attributeBuffer := buffer;
  1548. Inc(tmpBuffer);
  1549. valBuffer := PSDOInteger(tmpBuffer);
  1550. obj := Create_Field();
  1551. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_1));
  1552. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1553. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1554. CheckEquals(VAL_1,valBuffer^);
  1555. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_2));
  1556. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1557. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1558. CheckEquals(VAL_2,valBuffer^);
  1559. intVal := 0;
  1560. Inc(tmpBuffer);
  1561. Inc(attributeBuffer);
  1562. valBuffer := PSDOInteger(tmpBuffer);
  1563. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_1));
  1564. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1565. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1566. CheckEquals(VAL_1,valBuffer^);
  1567. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_2));
  1568. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1569. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1570. CheckEquals(VAL_2,valBuffer^);
  1571. end;
  1572. procedure TSDOIntegerField_Test.setInteger();
  1573. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1574. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1575. var
  1576. obj : ISDOField;
  1577. intVal : QWord;
  1578. buffer, tmpBuffer, attributeBuffer : PByte;
  1579. valBuffer : PSDOInteger;
  1580. begin
  1581. intVal := 0;
  1582. buffer := @intVal;
  1583. tmpBuffer := buffer;
  1584. attributeBuffer := buffer;
  1585. Inc(tmpBuffer);
  1586. valBuffer := PSDOInteger(tmpBuffer);
  1587. obj := Create_Field();
  1588. obj.setInteger(buffer,F_OFFSET_0,VAL_1);
  1589. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1590. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1591. CheckEquals(VAL_1,valBuffer^);
  1592. obj.setInteger(buffer,F_OFFSET_0,VAL_2);
  1593. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1594. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1595. CheckEquals(VAL_2,valBuffer^);
  1596. obj.setInteger(buffer,F_OFFSET_0,VAL_3);
  1597. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1598. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1599. CheckEquals(VAL_3,valBuffer^);
  1600. intVal := 0;
  1601. Inc(tmpBuffer);
  1602. Inc(attributeBuffer);
  1603. valBuffer := PSDOInteger(tmpBuffer);
  1604. obj.setInteger(buffer,F_OFFSET_1,VAL_1);
  1605. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1606. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1607. CheckEquals(VAL_1,valBuffer^);
  1608. obj.setInteger(buffer,F_OFFSET_1,VAL_2);
  1609. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1610. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1611. CheckEquals(VAL_2,valBuffer^);
  1612. obj.setInteger(buffer,F_OFFSET_1,VAL_3);
  1613. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1614. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1615. CheckEquals(VAL_3,valBuffer^);
  1616. end;
  1617. procedure TSDOIntegerField_Test.setLong();
  1618. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1619. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1620. var
  1621. obj : ISDOField;
  1622. intVal : QWord;
  1623. buffer, tmpBuffer, attributeBuffer : PByte;
  1624. valBuffer : PSDOInteger;
  1625. begin
  1626. intVal := 0;
  1627. buffer := @intVal;
  1628. tmpBuffer := buffer;
  1629. attributeBuffer := buffer;
  1630. Inc(tmpBuffer);
  1631. valBuffer := PSDOInteger(tmpBuffer);
  1632. obj := Create_Field();
  1633. obj.setLong(buffer,F_OFFSET_0,VAL_1);
  1634. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1635. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1636. CheckEquals(VAL_1,valBuffer^);
  1637. obj.setLong(buffer,F_OFFSET_0,VAL_2);
  1638. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1639. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1640. CheckEquals(VAL_2,valBuffer^);
  1641. obj.setLong(buffer,F_OFFSET_0,VAL_3);
  1642. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1643. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1644. CheckEquals(VAL_3,valBuffer^);
  1645. intVal := 0;
  1646. Inc(tmpBuffer);
  1647. Inc(attributeBuffer);
  1648. valBuffer := PSDOInteger(tmpBuffer);
  1649. obj.setLong(buffer,F_OFFSET_1,VAL_1);
  1650. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1651. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1652. CheckEquals(VAL_1,valBuffer^);
  1653. obj.setLong(buffer,F_OFFSET_1,VAL_2);
  1654. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1655. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1656. CheckEquals(VAL_2,valBuffer^);
  1657. obj.setLong(buffer,F_OFFSET_1,VAL_3);
  1658. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1659. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1660. CheckEquals(VAL_3,valBuffer^);
  1661. end;
  1662. procedure TSDOIntegerField_Test.setShort();
  1663. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1664. VAL_1 = 123; VAL_2 = -9876; VAL_3 = 0;
  1665. var
  1666. obj : ISDOField;
  1667. intVal : QWord;
  1668. buffer, tmpBuffer, attributeBuffer : PByte;
  1669. valBuffer : PSDOInteger;
  1670. begin
  1671. intVal := 0;
  1672. buffer := @intVal;
  1673. tmpBuffer := buffer;
  1674. attributeBuffer := buffer;
  1675. Inc(tmpBuffer);
  1676. valBuffer := PSDOInteger(tmpBuffer);
  1677. obj := Create_Field();
  1678. obj.setShort(buffer,F_OFFSET_0,VAL_1);
  1679. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1680. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1681. CheckEquals(VAL_1,valBuffer^);
  1682. obj.setShort(buffer,F_OFFSET_0,VAL_2);
  1683. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1684. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1685. CheckEquals(VAL_2,valBuffer^);
  1686. obj.setShort(buffer,F_OFFSET_0,VAL_3);
  1687. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1688. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1689. CheckEquals(VAL_3,valBuffer^);
  1690. intVal := 0;
  1691. Inc(tmpBuffer);
  1692. Inc(attributeBuffer);
  1693. valBuffer := PSDOInteger(tmpBuffer);
  1694. obj.setShort(buffer,F_OFFSET_1,VAL_1);
  1695. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1696. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1697. CheckEquals(VAL_1,valBuffer^);
  1698. obj.setShort(buffer,F_OFFSET_1,VAL_2);
  1699. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1700. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1701. CheckEquals(VAL_2,valBuffer^);
  1702. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  1703. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1704. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1705. CheckEquals(VAL_3,valBuffer^);
  1706. end;
  1707. procedure TSDOIntegerField_Test.setString();
  1708. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1709. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  1710. var
  1711. obj : ISDOField;
  1712. intVal : QWord;
  1713. buffer, tmpBuffer, attributeBuffer : PByte;
  1714. valBuffer : PSDOInteger;
  1715. begin
  1716. intVal := 0;
  1717. buffer := @intVal;
  1718. tmpBuffer := buffer;
  1719. attributeBuffer := buffer;
  1720. Inc(tmpBuffer);
  1721. valBuffer := PSDOInteger(tmpBuffer);
  1722. obj := Create_Field();
  1723. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_1));
  1724. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1725. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1726. CheckEquals(VAL_1,valBuffer^);
  1727. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_2));
  1728. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1729. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1730. CheckEquals(VAL_2,valBuffer^);
  1731. intVal := 0;
  1732. Inc(tmpBuffer);
  1733. Inc(attributeBuffer);
  1734. valBuffer := PSDOInteger(tmpBuffer);
  1735. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_1));
  1736. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1737. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1738. CheckEquals(VAL_1,valBuffer^);
  1739. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_2));
  1740. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  1741. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  1742. CheckEquals(VAL_2,valBuffer^);
  1743. end;
  1744. { TSDOStringField_Test }
  1745. class procedure TSDOStringField_Test.CleanUpBuffer(var ABuffer : PPSDOString);
  1746. begin
  1747. if ( ABuffer <> nil ) then begin
  1748. ABuffer^^ := '';
  1749. FreeMem(ABuffer^,SizeOf(PSDOString));
  1750. ABuffer^ := nil;
  1751. end;
  1752. end;
  1753. function TSDOStringField_Test.Create_Field() : ISDOField;
  1754. begin
  1755. Result := TSDOBaseStringField.Create();
  1756. end;
  1757. procedure TSDOStringField_Test.getBoolean();
  1758. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1759. VAL_1 = 'azerty12345'; VAL_2 = 'true'; VAL_3 = 'false'; VAL_4 = '1'; VAL_5 = '0';
  1760. var
  1761. obj : ISDOField;
  1762. trueBuffer : array[0..200] of Byte;
  1763. buffer, tmpBuffer, startBuffer : PByte;
  1764. valBuffer : PPSDOString;
  1765. ok : Boolean;
  1766. begin
  1767. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1768. buffer := @(trueBuffer[0]);
  1769. tmpBuffer := buffer;
  1770. startBuffer := tmpBuffer;
  1771. Inc(tmpBuffer);
  1772. valBuffer := PPSDOString(tmpBuffer);
  1773. obj := Create_Field();
  1774. ok := False;
  1775. try
  1776. obj.getBoolean(buffer,F_OFFSET_0);
  1777. except
  1778. on e : ESDOInvalidConversionException do begin
  1779. ok := True;
  1780. end;
  1781. end;
  1782. CheckEquals(True,ok,'Invalid conversion of empty string');
  1783. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1784. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1785. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1786. try
  1787. valBuffer^^ := VAL_1;
  1788. ok := False;
  1789. try
  1790. obj.getBoolean(buffer,F_OFFSET_0);
  1791. except
  1792. on e : ESDOInvalidConversionException do begin
  1793. ok := True;
  1794. end;
  1795. end;
  1796. CheckEquals(True,ok,'Invalid conversion : ' + VAL_1);
  1797. valBuffer^^ := VAL_2;
  1798. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  1799. valBuffer^^ := VAL_3;
  1800. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  1801. valBuffer^^ := VAL_4;
  1802. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  1803. valBuffer^^ := VAL_5;
  1804. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  1805. valBuffer^^ := '';
  1806. finally
  1807. FreeMem(valBuffer^,SizeOf(PSDOString));
  1808. valBuffer^ := nil;
  1809. end;
  1810. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1811. startBuffer := tmpBuffer;
  1812. Inc(tmpBuffer);
  1813. valBuffer := PPSDOString(tmpBuffer);
  1814. ok := False;
  1815. try
  1816. obj.getInteger(buffer,F_OFFSET_1);
  1817. except
  1818. on e : ESDOInvalidConversionException do begin
  1819. ok := True;
  1820. end;
  1821. end;
  1822. CheckEquals(True,ok,'Invalid Conversion');
  1823. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1824. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1825. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1826. try
  1827. valBuffer^^ := VAL_1;
  1828. valBuffer^^ := VAL_1;
  1829. ok := False;
  1830. try
  1831. obj.getBoolean(buffer,F_OFFSET_1);
  1832. except
  1833. on e : ESDOInvalidConversionException do begin
  1834. ok := True;
  1835. end;
  1836. end;
  1837. CheckEquals(True,ok,'Invalid conversion : ' + VAL_1);
  1838. valBuffer^^ := VAL_2;
  1839. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  1840. valBuffer^^ := VAL_3;
  1841. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  1842. valBuffer^^ := VAL_4;
  1843. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  1844. valBuffer^^ := VAL_5;
  1845. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  1846. finally
  1847. valBuffer^^ := '';
  1848. FreeMem(valBuffer^,SizeOf(PSDOString));
  1849. valBuffer^ := nil;
  1850. end;
  1851. end;
  1852. procedure TSDOStringField_Test.getByte();
  1853. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1854. VAL_1 = 'azerty12345'; VAL_2 = '12'; VAL_3 = '34'; VAL_4 = '0';
  1855. var
  1856. obj : ISDOField;
  1857. trueBuffer : array[0..200] of Byte;
  1858. buffer, tmpBuffer, startBuffer : PByte;
  1859. valBuffer : PPSDOString;
  1860. ok : Boolean;
  1861. begin
  1862. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1863. buffer := @(trueBuffer[0]);
  1864. tmpBuffer := buffer;
  1865. startBuffer := tmpBuffer;
  1866. Inc(tmpBuffer);
  1867. valBuffer := PPSDOString(tmpBuffer);
  1868. obj := Create_Field();
  1869. ok := False;
  1870. try
  1871. obj.getByte(buffer,F_OFFSET_0);
  1872. except
  1873. on e : ESDOInvalidConversionException do begin
  1874. ok := True;
  1875. end;
  1876. end;
  1877. CheckEquals(True,ok,'Invalid conversion');
  1878. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1879. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1880. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1881. try
  1882. valBuffer^^ := VAL_1;
  1883. ok := False;
  1884. try
  1885. obj.getByte(buffer,F_OFFSET_0);
  1886. except
  1887. on e : ESDOInvalidConversionException do begin
  1888. ok := True;
  1889. end;
  1890. end;
  1891. CheckEquals(True,ok,'Invalid conversion');
  1892. valBuffer^^ := VAL_2;
  1893. CheckEquals(StrToInt(VAL_2),obj.getByte(buffer,F_OFFSET_0));
  1894. valBuffer^^ := VAL_3;
  1895. CheckEquals(StrToInt(VAL_3),obj.getByte(buffer,F_OFFSET_0));
  1896. valBuffer^^ := VAL_4;
  1897. CheckEquals(StrToInt(VAL_4),obj.getByte(buffer,F_OFFSET_0));
  1898. valBuffer^^ := '';
  1899. finally
  1900. FreeMem(valBuffer^,SizeOf(PSDOString));
  1901. valBuffer^ := nil;
  1902. end;
  1903. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1904. startBuffer := tmpBuffer;
  1905. Inc(tmpBuffer);
  1906. valBuffer := PPSDOString(tmpBuffer);
  1907. ok := False;
  1908. try
  1909. obj.getByte(buffer,F_OFFSET_1);
  1910. except
  1911. on e : ESDOInvalidConversionException do begin
  1912. ok := True;
  1913. end;
  1914. end;
  1915. CheckEquals(True,ok,'Invalid Conversion');
  1916. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1917. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1918. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1919. try
  1920. valBuffer^^ := VAL_1;
  1921. ok := False;
  1922. try
  1923. obj.getByte(buffer,F_OFFSET_1);
  1924. except
  1925. on e : ESDOInvalidConversionException do begin
  1926. ok := True;
  1927. end;
  1928. end;
  1929. CheckEquals(True,ok,'Invalid conversion');
  1930. valBuffer^^ := VAL_2;
  1931. CheckEquals(StrToInt(VAL_2),obj.getByte(buffer,F_OFFSET_1));
  1932. valBuffer^^ := VAL_3;
  1933. CheckEquals(StrToInt(VAL_3),obj.getByte(buffer,F_OFFSET_1));
  1934. valBuffer^^ := VAL_4;
  1935. CheckEquals(StrToInt(VAL_4),obj.getByte(buffer,F_OFFSET_1));
  1936. valBuffer^^ := '';
  1937. finally
  1938. FreeMem(valBuffer^,SizeOf(PSDOString));
  1939. valBuffer^ := nil;
  1940. end;
  1941. end;
  1942. procedure TSDOStringField_Test.getCharacter();
  1943. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  1944. VAL_1 = 'K'; VAL_2 = 'w'; VAL_3 = #0;
  1945. var
  1946. obj : ISDOField;
  1947. trueBuffer : array[0..200] of Byte;
  1948. buffer, tmpBuffer, startBuffer : PByte;
  1949. valBuffer : PPSDOString;
  1950. ok : Boolean;
  1951. begin
  1952. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1953. buffer := @(trueBuffer[0]);
  1954. tmpBuffer := buffer;
  1955. startBuffer := tmpBuffer;
  1956. Inc(tmpBuffer);
  1957. valBuffer := PPSDOString(tmpBuffer);
  1958. obj := Create_Field();
  1959. ok := False;
  1960. try
  1961. obj.getCharacter(buffer,F_OFFSET_0);
  1962. except
  1963. on e : ESDOInvalidConversionException do begin
  1964. ok := True;
  1965. end;
  1966. end;
  1967. CheckEquals(True,ok,'Invalid conversion');
  1968. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1969. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1970. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1971. try
  1972. valBuffer^^ := VAL_1;
  1973. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_0));
  1974. valBuffer^^ := VAL_2;
  1975. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_0));
  1976. valBuffer^^ := VAL_3;
  1977. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_0));
  1978. valBuffer^^ := '';
  1979. finally
  1980. FreeMem(valBuffer^,SizeOf(PSDOString));
  1981. valBuffer^ := nil;
  1982. end;
  1983. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  1984. startBuffer := tmpBuffer;
  1985. Inc(tmpBuffer);
  1986. valBuffer := PPSDOString(tmpBuffer);
  1987. ok := False;
  1988. try
  1989. obj.getCharacter(buffer,F_OFFSET_1);
  1990. except
  1991. on e : ESDOInvalidConversionException do begin
  1992. ok := True;
  1993. end;
  1994. end;
  1995. CheckEquals(True,ok,'Invalid Conversion');
  1996. SetBit(startBuffer^,BIT_ORDER_SET,True);
  1997. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  1998. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  1999. try
  2000. valBuffer^^ := VAL_1;
  2001. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_1));
  2002. valBuffer^^ := VAL_2;
  2003. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_1));
  2004. valBuffer^^ := VAL_3;
  2005. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_1));
  2006. valBuffer^^ := '';
  2007. finally
  2008. FreeMem(valBuffer^,SizeOf(PSDOString));
  2009. valBuffer^ := nil;
  2010. end;
  2011. end;
  2012. procedure TSDOStringField_Test.getInteger();
  2013. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2014. VAL_1 = 'azerty12345'; VAL_2 = '-9876'; VAL_3 = '567'; VAL_4 = '0';
  2015. var
  2016. obj : ISDOField;
  2017. trueBuffer : array[0..200] of Byte;
  2018. buffer, tmpBuffer, startBuffer : PByte;
  2019. valBuffer : PPSDOString;
  2020. ok : Boolean;
  2021. begin
  2022. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2023. buffer := @(trueBuffer[0]);
  2024. tmpBuffer := buffer;
  2025. startBuffer := tmpBuffer;
  2026. Inc(tmpBuffer);
  2027. valBuffer := PPSDOString(tmpBuffer);
  2028. obj := Create_Field();
  2029. ok := False;
  2030. try
  2031. obj.getInteger(buffer,F_OFFSET_0);
  2032. except
  2033. on e : ESDOInvalidConversionException do begin
  2034. ok := True;
  2035. end;
  2036. end;
  2037. CheckEquals(True,ok,'Invalid conversion');
  2038. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2039. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2040. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2041. try
  2042. valBuffer^^ := VAL_1;
  2043. ok := False;
  2044. try
  2045. obj.getInteger(buffer,F_OFFSET_0);
  2046. except
  2047. on e : ESDOInvalidConversionException do begin
  2048. ok := True;
  2049. end;
  2050. end;
  2051. CheckEquals(True,ok,'Invalid conversion');
  2052. valBuffer^^ := VAL_2;
  2053. CheckEquals(StrToInt(VAL_2),obj.getInteger(buffer,F_OFFSET_0));
  2054. valBuffer^^ := VAL_3;
  2055. CheckEquals(StrToInt(VAL_3),obj.getInteger(buffer,F_OFFSET_0));
  2056. valBuffer^^ := VAL_4;
  2057. CheckEquals(StrToInt(VAL_4),obj.getInteger(buffer,F_OFFSET_0));
  2058. valBuffer^^ := '';
  2059. finally
  2060. FreeMem(valBuffer^,SizeOf(PSDOString));
  2061. valBuffer^ := nil;
  2062. end;
  2063. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2064. startBuffer := tmpBuffer;
  2065. Inc(tmpBuffer);
  2066. valBuffer := PPSDOString(tmpBuffer);
  2067. ok := False;
  2068. try
  2069. obj.getInteger(buffer,F_OFFSET_1);
  2070. except
  2071. on e : ESDOInvalidConversionException do begin
  2072. ok := True;
  2073. end;
  2074. end;
  2075. CheckEquals(True,ok,'Invalid Conversion');
  2076. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2077. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2078. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2079. try
  2080. valBuffer^^ := VAL_1;
  2081. ok := False;
  2082. try
  2083. obj.getInteger(buffer,F_OFFSET_1);
  2084. except
  2085. on e : ESDOInvalidConversionException do begin
  2086. ok := True;
  2087. end;
  2088. end;
  2089. CheckEquals(True,ok,'Invalid conversion');
  2090. valBuffer^^ := VAL_2;
  2091. CheckEquals(StrToInt(VAL_2),obj.getInteger(buffer,F_OFFSET_1));
  2092. valBuffer^^ := VAL_3;
  2093. CheckEquals(StrToInt(VAL_3),obj.getInteger(buffer,F_OFFSET_1));
  2094. valBuffer^^ := VAL_4;
  2095. CheckEquals(StrToInt(VAL_4),obj.getInteger(buffer,F_OFFSET_1));
  2096. valBuffer^^ := '';
  2097. finally
  2098. FreeMem(valBuffer^,SizeOf(PSDOString));
  2099. valBuffer^ := nil;
  2100. end;
  2101. end;
  2102. procedure TSDOStringField_Test.getLong();
  2103. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2104. VAL_1 = 'azerty12345'; VAL_2 = '123456852'; VAL_3 = '-3489962255'; VAL_4 = '0';
  2105. var
  2106. obj : ISDOField;
  2107. trueBuffer : array[0..200] of Byte;
  2108. buffer, tmpBuffer, startBuffer : PByte;
  2109. valBuffer : PPSDOString;
  2110. ok : Boolean;
  2111. begin
  2112. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2113. buffer := @(trueBuffer[0]);
  2114. tmpBuffer := buffer;
  2115. startBuffer := tmpBuffer;
  2116. Inc(tmpBuffer);
  2117. valBuffer := PPSDOString(tmpBuffer);
  2118. obj := Create_Field();
  2119. ok := False;
  2120. try
  2121. obj.getLong(buffer,F_OFFSET_0);
  2122. except
  2123. on e : ESDOInvalidConversionException do begin
  2124. ok := True;
  2125. end;
  2126. end;
  2127. CheckEquals(True,ok,'Invalid conversion');
  2128. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2129. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2130. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2131. try
  2132. valBuffer^^ := VAL_1;
  2133. ok := False;
  2134. try
  2135. obj.getLong(buffer,F_OFFSET_0);
  2136. except
  2137. on e : ESDOInvalidConversionException do begin
  2138. ok := True;
  2139. end;
  2140. end;
  2141. CheckEquals(True,ok,'Invalid conversion');
  2142. valBuffer^^ := VAL_2;
  2143. CheckEquals(StrToInt64(VAL_2),obj.getLong(buffer,F_OFFSET_0));
  2144. valBuffer^^ := VAL_3;
  2145. CheckEquals(StrToInt64(VAL_3),obj.getLong(buffer,F_OFFSET_0));
  2146. valBuffer^^ := VAL_4;
  2147. CheckEquals(StrToInt64(VAL_4),obj.getLong(buffer,F_OFFSET_0));
  2148. valBuffer^^ := '';
  2149. finally
  2150. FreeMem(valBuffer^,SizeOf(PSDOString));
  2151. valBuffer^ := nil;
  2152. end;
  2153. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2154. startBuffer := tmpBuffer;
  2155. Inc(tmpBuffer);
  2156. valBuffer := PPSDOString(tmpBuffer);
  2157. ok := False;
  2158. try
  2159. obj.getLong(buffer,F_OFFSET_1);
  2160. except
  2161. on e : ESDOInvalidConversionException do begin
  2162. ok := True;
  2163. end;
  2164. end;
  2165. CheckEquals(True,ok,'Invalid Conversion');
  2166. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2167. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2168. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2169. try
  2170. valBuffer^^ := VAL_1;
  2171. ok := False;
  2172. try
  2173. obj.getLong(buffer,F_OFFSET_1);
  2174. except
  2175. on e : ESDOInvalidConversionException do begin
  2176. ok := True;
  2177. end;
  2178. end;
  2179. CheckEquals(True,ok,'Invalid conversion');
  2180. valBuffer^^ := VAL_2;
  2181. CheckEquals(StrToInt64(VAL_2),obj.getLong(buffer,F_OFFSET_1));
  2182. valBuffer^^ := VAL_3;
  2183. CheckEquals(StrToInt64(VAL_3),obj.getLong(buffer,F_OFFSET_1));
  2184. valBuffer^^ := VAL_4;
  2185. CheckEquals(StrToInt64(VAL_4),obj.getLong(buffer,F_OFFSET_1));
  2186. valBuffer^^ := '';
  2187. finally
  2188. FreeMem(valBuffer^,SizeOf(PSDOString));
  2189. valBuffer^ := nil;
  2190. end;
  2191. end;
  2192. procedure TSDOStringField_Test.getShort();
  2193. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2194. VAL_1 = 'azerty12345'; VAL_2 = '5678'; VAL_3 = '-3489'; VAL_4 = '0';
  2195. var
  2196. obj : ISDOField;
  2197. trueBuffer : array[0..200] of Byte;
  2198. buffer, tmpBuffer, startBuffer : PByte;
  2199. valBuffer : PPSDOString;
  2200. ok : Boolean;
  2201. begin
  2202. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2203. buffer := @(trueBuffer[0]);
  2204. tmpBuffer := buffer;
  2205. startBuffer := tmpBuffer;
  2206. Inc(tmpBuffer);
  2207. valBuffer := PPSDOString(tmpBuffer);
  2208. obj := Create_Field();
  2209. ok := False;
  2210. try
  2211. obj.getShort(buffer,F_OFFSET_0);
  2212. except
  2213. on e : ESDOInvalidConversionException do begin
  2214. ok := True;
  2215. end;
  2216. end;
  2217. CheckEquals(True,ok,'Invalid conversion');
  2218. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2219. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2220. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2221. try
  2222. valBuffer^^ := VAL_1;
  2223. ok := False;
  2224. try
  2225. obj.getShort(buffer,F_OFFSET_0);
  2226. except
  2227. on e : ESDOInvalidConversionException do begin
  2228. ok := True;
  2229. end;
  2230. end;
  2231. CheckEquals(True,ok,'Invalid conversion');
  2232. valBuffer^^ := VAL_2;
  2233. CheckEquals(StrToInt(VAL_2),obj.getShort(buffer,F_OFFSET_0));
  2234. valBuffer^^ := VAL_3;
  2235. CheckEquals(StrToInt(VAL_3),obj.getShort(buffer,F_OFFSET_0));
  2236. valBuffer^^ := VAL_4;
  2237. CheckEquals(StrToInt(VAL_4),obj.getShort(buffer,F_OFFSET_0));
  2238. valBuffer^^ := '';
  2239. finally
  2240. FreeMem(valBuffer^,SizeOf(PSDOString));
  2241. valBuffer^ := nil;
  2242. end;
  2243. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2244. startBuffer := tmpBuffer;
  2245. Inc(tmpBuffer);
  2246. valBuffer := PPSDOString(tmpBuffer);
  2247. ok := False;
  2248. try
  2249. obj.getShort(buffer,F_OFFSET_1);
  2250. except
  2251. on e : ESDOInvalidConversionException do begin
  2252. ok := True;
  2253. end;
  2254. end;
  2255. CheckEquals(True,ok,'Invalid Conversion');
  2256. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2257. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2258. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2259. try
  2260. valBuffer^^ := VAL_1;
  2261. ok := False;
  2262. try
  2263. obj.getShort(buffer,F_OFFSET_1);
  2264. except
  2265. on e : ESDOInvalidConversionException do begin
  2266. ok := True;
  2267. end;
  2268. end;
  2269. CheckEquals(True,ok,'Invalid conversion');
  2270. valBuffer^^ := VAL_2;
  2271. CheckEquals(StrToInt(VAL_2),obj.getShort(buffer,F_OFFSET_1));
  2272. valBuffer^^ := VAL_3;
  2273. CheckEquals(StrToInt(VAL_3),obj.getShort(buffer,F_OFFSET_1));
  2274. valBuffer^^ := VAL_4;
  2275. CheckEquals(StrToInt(VAL_4),obj.getShort(buffer,F_OFFSET_1));
  2276. valBuffer^^ := '';
  2277. finally
  2278. FreeMem(valBuffer^,SizeOf(PSDOString));
  2279. valBuffer^ := nil;
  2280. end;
  2281. end;
  2282. procedure TSDOStringField_Test.getString();
  2283. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2284. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2285. var
  2286. obj : ISDOField;
  2287. trueBuffer : array[0..200] of Byte;
  2288. buffer, tmpBuffer, startBuffer : PByte;
  2289. valBuffer : PPSDOString;
  2290. begin
  2291. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2292. buffer := @(trueBuffer[0]);
  2293. tmpBuffer := buffer;
  2294. startBuffer := tmpBuffer;
  2295. Inc(tmpBuffer);
  2296. valBuffer := PPSDOString(tmpBuffer);
  2297. obj := Create_Field();
  2298. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2299. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2300. try
  2301. valBuffer^^ := VAL_1;
  2302. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2303. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2304. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2305. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2306. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2307. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2308. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2309. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2310. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2311. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2312. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2313. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2314. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2315. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2316. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2317. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2318. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2319. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2320. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2321. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2322. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2323. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2324. valBuffer^^ := VAL_2;
  2325. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2326. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2327. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2328. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2329. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2330. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2331. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2332. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2333. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2334. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2335. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2336. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2337. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2338. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2339. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2340. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2341. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2342. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2343. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2344. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2345. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2346. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2347. valBuffer^^ := VAL_3;
  2348. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2349. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2350. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2351. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2352. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2353. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2354. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2355. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2356. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2357. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2358. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2359. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2360. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2361. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2362. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2363. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2364. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2365. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2366. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2367. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2368. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2369. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2370. valBuffer^^ := '';
  2371. finally
  2372. FreeMem(valBuffer^,SizeOf(PSDOString));
  2373. valBuffer^ := nil;
  2374. end;
  2375. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2376. startBuffer := tmpBuffer;
  2377. Inc(tmpBuffer);
  2378. valBuffer := PPSDOString(tmpBuffer);
  2379. CheckEquals('',obj.getString(buffer,F_OFFSET_0));
  2380. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2381. try
  2382. valBuffer^^ := VAL_1;
  2383. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2384. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2385. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2386. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2387. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2388. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2389. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2390. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2391. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2392. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2393. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2394. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2395. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2396. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2397. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2398. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2399. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2400. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2401. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2402. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2403. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2404. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2405. valBuffer^^ := VAL_2;
  2406. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2407. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2408. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2409. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2410. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2411. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2412. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2413. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2414. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2415. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2416. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2417. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2418. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2419. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2420. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2421. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2422. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2423. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2424. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2425. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2426. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2427. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2428. valBuffer^^ := VAL_3;
  2429. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2430. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2431. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2432. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2433. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2434. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2435. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2436. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2437. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2438. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2439. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2440. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2441. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2442. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2443. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2444. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2445. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2446. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2447. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2448. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2449. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2450. CheckEquals('',obj.getString(buffer,F_OFFSET_1));
  2451. valBuffer^^ := '';
  2452. finally
  2453. FreeMem(valBuffer^,SizeOf(PSDOString));
  2454. valBuffer^ := nil;
  2455. end;
  2456. end;
  2457. procedure TSDOStringField_Test.setBoolean();
  2458. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2459. var
  2460. obj : ISDOField;
  2461. trueBuffer : array[0..200] of Byte;
  2462. buffer, tmpBuffer : PByte;
  2463. valBuffer : PPSDOString;
  2464. begin
  2465. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2466. buffer := @(trueBuffer[0]);
  2467. tmpBuffer := buffer;
  2468. Inc(tmpBuffer);
  2469. valBuffer := PPSDOString(tmpBuffer);
  2470. obj := Create_Field();
  2471. obj.setBoolean(buffer,F_OFFSET_0,True);
  2472. CheckEquals('1',valBuffer^^);
  2473. obj.setBoolean(buffer,F_OFFSET_0,False);
  2474. CheckEquals('0',valBuffer^^);
  2475. // Clean up to avoid false MEM-LEAK
  2476. CleanUpBuffer(valBuffer);
  2477. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2478. Inc(tmpBuffer);
  2479. valBuffer := PPSDOString(tmpBuffer);
  2480. obj.setBoolean(buffer,F_OFFSET_1,True);
  2481. CheckEquals('1',valBuffer^^);
  2482. obj.setBoolean(buffer,F_OFFSET_1,False);
  2483. CheckEquals('0',valBuffer^^);
  2484. // Clean up to avoid false MEM-LEAK
  2485. CleanUpBuffer(valBuffer);
  2486. end;
  2487. procedure TSDOStringField_Test.setByte();
  2488. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2489. VAL_1 = '123'; VAL_2 = '45'; VAL_3 = '0';
  2490. var
  2491. obj : ISDOField;
  2492. trueBuffer : array[0..200] of Byte;
  2493. buffer, tmpBuffer, startBuffer : PByte;
  2494. valBuffer : PPSDOString;
  2495. begin
  2496. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2497. buffer := @(trueBuffer[0]);
  2498. tmpBuffer := buffer;
  2499. startBuffer := tmpBuffer;
  2500. Inc(tmpBuffer);
  2501. valBuffer := PPSDOString(tmpBuffer);
  2502. obj := Create_Field();
  2503. obj.setByte(buffer,F_OFFSET_0,StrToInt(VAL_1));
  2504. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2505. obj.setByte(buffer,F_OFFSET_0,StrToInt(VAL_2));
  2506. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2507. obj.setByte(buffer,F_OFFSET_0,StrToInt(VAL_3));
  2508. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2509. // Clean up to avoid false MEM-LEAK
  2510. CleanUpBuffer(valBuffer);
  2511. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2512. startBuffer := tmpBuffer;
  2513. Inc(tmpBuffer);
  2514. valBuffer := PPSDOString(tmpBuffer);
  2515. obj.setByte(buffer,F_OFFSET_1,StrToInt(VAL_1));
  2516. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2517. obj.setByte(buffer,F_OFFSET_1,StrToInt(VAL_2));
  2518. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2519. obj.setByte(buffer,F_OFFSET_1,StrToInt(VAL_3));
  2520. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2521. // Clean up to avoid false MEM-LEAK
  2522. CleanUpBuffer(valBuffer);
  2523. end;
  2524. procedure TSDOStringField_Test.setCharacter();
  2525. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2526. VAL_1 = 'K'; VAL_2 = 'W'; VAL_3 = #0;
  2527. var
  2528. obj : ISDOField;
  2529. trueBuffer : array[0..200] of Byte;
  2530. buffer, tmpBuffer, startBuffer : PByte;
  2531. valBuffer : PPSDOString;
  2532. begin
  2533. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2534. buffer := @(trueBuffer[0]);
  2535. tmpBuffer := buffer;
  2536. startBuffer := tmpBuffer;
  2537. Inc(tmpBuffer);
  2538. valBuffer := PPSDOString(tmpBuffer);
  2539. obj := Create_Field();
  2540. obj.setCharacter(buffer,F_OFFSET_0,VAL_1);
  2541. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2542. obj.setCharacter(buffer,F_OFFSET_0,VAL_2);
  2543. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2544. obj.setCharacter(buffer,F_OFFSET_0,VAL_3);
  2545. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2546. // Clean up to avoid false MEM-LEAK
  2547. CleanUpBuffer(valBuffer);
  2548. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2549. startBuffer := tmpBuffer;
  2550. Inc(tmpBuffer);
  2551. valBuffer := PPSDOString(tmpBuffer);
  2552. obj.setCharacter(buffer,F_OFFSET_1,VAL_1);
  2553. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2554. obj.setCharacter(buffer,F_OFFSET_1,VAL_2);
  2555. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2556. obj.setCharacter(buffer,F_OFFSET_1,VAL_3);
  2557. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2558. // Clean up to avoid false MEM-LEAK
  2559. CleanUpBuffer(valBuffer);
  2560. end;
  2561. procedure TSDOStringField_Test.setInteger();
  2562. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2563. VAL_1 = '12345'; VAL_2 = '-3476'; VAL_3 = '0';
  2564. var
  2565. obj : ISDOField;
  2566. trueBuffer : array[0..200] of Byte;
  2567. buffer, tmpBuffer, startBuffer : PByte;
  2568. valBuffer : PPSDOString;
  2569. begin
  2570. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2571. buffer := @(trueBuffer[0]);
  2572. tmpBuffer := buffer;
  2573. startBuffer := tmpBuffer;
  2574. Inc(tmpBuffer);
  2575. valBuffer := PPSDOString(tmpBuffer);
  2576. obj := Create_Field();
  2577. obj.setInteger(buffer,F_OFFSET_0,StrToInt(VAL_1));
  2578. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2579. obj.setInteger(buffer,F_OFFSET_0,StrToInt(VAL_2));
  2580. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2581. obj.setInteger(buffer,F_OFFSET_0,StrToInt(VAL_3));
  2582. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2583. // Clean up to avoid false MEM-LEAK
  2584. CleanUpBuffer(valBuffer);
  2585. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2586. startBuffer := tmpBuffer;
  2587. Inc(tmpBuffer);
  2588. valBuffer := PPSDOString(tmpBuffer);
  2589. obj.setInteger(buffer,F_OFFSET_1,StrToInt(VAL_1));
  2590. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2591. obj.setInteger(buffer,F_OFFSET_1,StrToInt(VAL_2));
  2592. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2593. obj.setInteger(buffer,F_OFFSET_1,StrToInt(VAL_3));
  2594. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2595. // Clean up to avoid false MEM-LEAK
  2596. CleanUpBuffer(valBuffer);
  2597. end;
  2598. procedure TSDOStringField_Test.setLong();
  2599. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2600. VAL_1 = '123456852'; VAL_2 = '3489962255'; VAL_3 = '0';
  2601. var
  2602. obj : ISDOField;
  2603. trueBuffer : array[0..200] of Byte;
  2604. buffer, tmpBuffer, startBuffer : PByte;
  2605. valBuffer : PPSDOString;
  2606. begin
  2607. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2608. buffer := @(trueBuffer[0]);
  2609. tmpBuffer := buffer;
  2610. startBuffer := tmpBuffer;
  2611. Inc(tmpBuffer);
  2612. valBuffer := PPSDOString(tmpBuffer);
  2613. obj := Create_Field();
  2614. obj.setLong(buffer,F_OFFSET_0,StrToInt64(VAL_1));
  2615. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2616. obj.setLong(buffer,F_OFFSET_0,StrToInt64(VAL_2));
  2617. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2618. obj.setLong(buffer,F_OFFSET_0,StrToInt64(VAL_3));
  2619. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2620. // Clean up to avoid false MEM-LEAK
  2621. CleanUpBuffer(valBuffer);
  2622. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2623. startBuffer := tmpBuffer;
  2624. Inc(tmpBuffer);
  2625. valBuffer := PPSDOString(tmpBuffer);
  2626. obj.setLong(buffer,F_OFFSET_1,StrToInt64(VAL_1));
  2627. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2628. obj.setLong(buffer,F_OFFSET_1,StrToInt64(VAL_2));
  2629. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2630. obj.setLong(buffer,F_OFFSET_1,StrToInt64(VAL_3));
  2631. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2632. // Clean up to avoid false MEM-LEAK
  2633. CleanUpBuffer(valBuffer);
  2634. end;
  2635. procedure TSDOStringField_Test.setNull();
  2636. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2637. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2638. var
  2639. obj : ISDOField;
  2640. trueBuffer : array[0..200] of Byte;
  2641. buffer, tmpBuffer, startBuffer : PByte;
  2642. valBuffer : PPSDOString;
  2643. begin
  2644. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2645. buffer := @(trueBuffer[0]);
  2646. tmpBuffer := buffer;
  2647. startBuffer := tmpBuffer;
  2648. Inc(tmpBuffer);
  2649. valBuffer := PPSDOString(tmpBuffer);
  2650. obj := Create_Field();
  2651. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2652. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2653. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2654. obj.setNull(buffer,F_OFFSET_0);
  2655. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2656. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2657. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2658. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2659. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2660. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2661. obj.setNull(buffer,F_OFFSET_0);
  2662. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2663. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2664. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2665. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2666. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2667. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2668. obj.setNull(buffer,F_OFFSET_0);
  2669. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2670. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2671. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2672. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2673. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2674. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2675. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2676. valBuffer^^ := VAL_1;
  2677. obj.setNull(buffer,F_OFFSET_0);
  2678. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2679. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2680. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2681. Check(valBuffer^ = nil);
  2682. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2683. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2684. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2685. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2686. valBuffer^^ := VAL_2;
  2687. obj.setNull(buffer,F_OFFSET_0);
  2688. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2689. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2690. Check(valBuffer^ = nil);
  2691. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2692. startBuffer := tmpBuffer;
  2693. Inc(tmpBuffer);
  2694. valBuffer := PPSDOString(tmpBuffer);
  2695. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2696. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2697. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2698. obj.setNull(buffer,F_OFFSET_1);
  2699. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2700. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2701. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2702. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2703. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2704. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2705. obj.setNull(buffer,F_OFFSET_1);
  2706. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2707. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2708. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2709. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2710. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2711. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2712. obj.setNull(buffer,F_OFFSET_1);
  2713. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2714. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2715. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2716. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2717. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2718. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2719. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2720. valBuffer^^ := VAL_1;
  2721. obj.setNull(buffer,F_OFFSET_1);
  2722. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2723. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2724. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2725. Check(valBuffer^ = nil);
  2726. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2727. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2728. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2729. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2730. valBuffer^^ := VAL_2;
  2731. obj.setNull(buffer,F_OFFSET_1);
  2732. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  2733. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  2734. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2735. Check(valBuffer^ = nil);
  2736. end;
  2737. procedure TSDOStringField_Test.setShort();
  2738. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2739. VAL_1 = '6852'; VAL_2 = '-255'; VAL_3 = '0';
  2740. var
  2741. obj : ISDOField;
  2742. trueBuffer : array[0..200] of Byte;
  2743. buffer, tmpBuffer, startBuffer : PByte;
  2744. valBuffer : PPSDOString;
  2745. begin
  2746. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2747. buffer := @(trueBuffer[0]);
  2748. tmpBuffer := buffer;
  2749. startBuffer := tmpBuffer;
  2750. Inc(tmpBuffer);
  2751. valBuffer := PPSDOString(tmpBuffer);
  2752. obj := Create_Field();
  2753. obj.setShort(buffer,F_OFFSET_0,StrToInt(VAL_1));
  2754. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  2755. obj.setShort(buffer,F_OFFSET_0,StrToInt(VAL_2));
  2756. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  2757. obj.setShort(buffer,F_OFFSET_0,StrToInt(VAL_3));
  2758. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  2759. // Clean up to avoid false MEM-LEAK
  2760. CleanUpBuffer(valBuffer);
  2761. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2762. startBuffer := tmpBuffer;
  2763. Inc(tmpBuffer);
  2764. valBuffer := PPSDOString(tmpBuffer);
  2765. obj.setShort(buffer,F_OFFSET_1,StrToInt(VAL_1));
  2766. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  2767. obj.setShort(buffer,F_OFFSET_1,StrToInt(VAL_2));
  2768. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  2769. obj.setShort(buffer,F_OFFSET_1,StrToInt(VAL_3));
  2770. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  2771. // Clean up to avoid false MEM-LEAK
  2772. CleanUpBuffer(valBuffer);
  2773. end;
  2774. procedure TSDOStringField_Test.setString();
  2775. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2776. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2777. var
  2778. obj : ISDOField;
  2779. trueBuffer : array[0..200] of Byte;
  2780. buffer, tmpBuffer, startBuffer : PByte;
  2781. valBuffer : PPSDOString;
  2782. begin
  2783. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2784. buffer := @(trueBuffer[0]);
  2785. tmpBuffer := buffer;
  2786. startBuffer := tmpBuffer;
  2787. Inc(tmpBuffer);
  2788. valBuffer := PPSDOString(tmpBuffer);
  2789. obj := Create_Field();
  2790. obj.setString(buffer,F_OFFSET_0,'');
  2791. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2792. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2793. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2794. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2795. obj.setString(buffer,F_OFFSET_0,VAL_1);
  2796. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2797. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2798. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2799. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2800. CheckEquals(VAL_1,valBuffer^^);
  2801. obj.setString(buffer,F_OFFSET_0,VAL_2);
  2802. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2803. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2804. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2805. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2806. CheckEquals(VAL_2,valBuffer^^);
  2807. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2808. obj.setString(buffer,F_OFFSET_0,VAL_3);
  2809. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2810. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2811. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2812. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2813. CheckEquals(VAL_3,valBuffer^^);
  2814. // Clean up to avoid false MEM-LEAK
  2815. CleanUpBuffer(valBuffer);
  2816. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2817. startBuffer := tmpBuffer;
  2818. Inc(tmpBuffer);
  2819. valBuffer := PPSDOString(tmpBuffer);
  2820. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2821. obj.setString(buffer,F_OFFSET_1,'');
  2822. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2823. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2824. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2825. obj.setString(buffer,F_OFFSET_1,VAL_1);
  2826. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2827. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2828. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2829. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2830. CheckEquals(VAL_1,valBuffer^^);
  2831. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2832. obj.setString(buffer,F_OFFSET_1,VAL_2);
  2833. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2834. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2835. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2836. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2837. CheckEquals(VAL_2,valBuffer^^);
  2838. obj.setString(buffer,F_OFFSET_1,VAL_3);
  2839. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2840. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2841. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2842. CheckEquals(True, ( valBuffer^ <> nil ), 'string buffer' );
  2843. CheckEquals(VAL_3,valBuffer^^);
  2844. // Clean up to avoid false MEM-LEAK
  2845. CleanUpBuffer(valBuffer);
  2846. end;
  2847. procedure TSDOStringField_Test.setString_unset_setStrin;
  2848. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2849. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2850. var
  2851. obj : ISDOField;
  2852. trueBuffer : array[0..200] of Byte;
  2853. buffer, tmpBuffer, startBuffer : PByte;
  2854. valBuffer : PPSDOString;
  2855. begin
  2856. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2857. buffer := @(trueBuffer[0]);
  2858. tmpBuffer := buffer;
  2859. startBuffer := tmpBuffer;
  2860. Inc(tmpBuffer);
  2861. valBuffer := PPSDOString(tmpBuffer);
  2862. obj := Create_Field();
  2863. obj.setString(buffer,F_OFFSET_0,'');
  2864. obj.unset(buffer,F_OFFSET_0);
  2865. obj.setString(buffer,F_OFFSET_0,'');
  2866. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  2867. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  2868. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  2869. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  2870. end;
  2871. procedure TSDOStringField_Test.unset();
  2872. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  2873. VAL_1 = 'azerty12345'; VAL_2 = 'xyz-9876'; VAL_3 = '';
  2874. var
  2875. obj : ISDOField;
  2876. trueBuffer : array[0..200] of Byte;
  2877. buffer, tmpBuffer, startBuffer : PByte;
  2878. valBuffer : PPSDOString;
  2879. begin
  2880. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2881. buffer := @(trueBuffer[0]);
  2882. tmpBuffer := buffer;
  2883. startBuffer := tmpBuffer;
  2884. Inc(tmpBuffer);
  2885. valBuffer := PPSDOString(tmpBuffer);
  2886. obj := Create_Field();
  2887. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2888. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2889. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2890. obj.unset(buffer,F_OFFSET_0);
  2891. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2892. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2893. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2894. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2895. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2896. obj.unset(buffer,F_OFFSET_0);
  2897. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2898. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2899. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2900. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2901. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2902. obj.unset(buffer,F_OFFSET_0);
  2903. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2904. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2905. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2906. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2907. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2908. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2909. valBuffer^^ := VAL_1;
  2910. obj.unset(buffer,F_OFFSET_0);
  2911. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2912. CheckEquals(
  2913. True(*this is necessary for default value management*),
  2914. IsBitON(startBuffer^,BIT_ORDER_BUFFER),
  2915. 'BIT_ORDER_SET, this is necessary for default value management'
  2916. );
  2917. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  2918. CheckEquals(VAL_1, valBuffer^^);
  2919. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  2920. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2921. SetBit(startBuffer^,BIT_ORDER_SET,True);//startBuffer^ := 2;
  2922. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2923. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2924. valBuffer^^ := VAL_2;
  2925. obj.unset(buffer,F_OFFSET_0);
  2926. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2927. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  2928. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  2929. CheckEquals(VAL_2, valBuffer^^);
  2930. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  2931. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2932. SetBit(startBuffer^,BIT_ORDER_SET,True);//startBuffer^ := 2;
  2933. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2934. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2935. valBuffer^^ := VAL_3;
  2936. obj.unset(buffer,F_OFFSET_0);
  2937. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2938. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  2939. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  2940. CheckEquals(VAL_3, valBuffer^^);
  2941. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  2942. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  2943. startBuffer := tmpBuffer;
  2944. Inc(tmpBuffer);
  2945. valBuffer := PPSDOString(tmpBuffer);
  2946. SetBit(startBuffer^,BIT_ORDER_SET,False);
  2947. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2948. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2949. obj.unset(buffer,F_OFFSET_1);
  2950. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2951. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2952. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2953. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2954. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2955. obj.unset(buffer,F_OFFSET_1);
  2956. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2957. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2958. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2959. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  2960. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  2961. obj.unset(buffer,F_OFFSET_1);
  2962. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2963. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  2964. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2965. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2966. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2967. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2968. valBuffer^^ := VAL_1;
  2969. obj.unset(buffer,F_OFFSET_1);
  2970. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2971. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  2972. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  2973. CheckEquals(VAL_1, valBuffer^^);
  2974. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  2975. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2976. SetBit(startBuffer^,BIT_ORDER_SET,True);//startBuffer^ := 2;
  2977. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2978. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2979. valBuffer^^ := VAL_2;
  2980. obj.unset(buffer,F_OFFSET_1);
  2981. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2982. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  2983. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  2984. CheckEquals(VAL_2, valBuffer^^);
  2985. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  2986. GetMem(valBuffer^,SizeOf(PSDOString)); FillChar(valBuffer^^,SizeOf(TSDOString),#0);
  2987. SetBit(startBuffer^,BIT_ORDER_SET,True);
  2988. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  2989. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  2990. valBuffer^^ := VAL_3;
  2991. obj.unset(buffer,F_OFFSET_1);
  2992. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  2993. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_BUFFER),'BIT_ORDER_SET, this is necessary for default value management');
  2994. CheckNotEquals(PtrUInt(nil), PtrUInt(valBuffer^), 'The buffer must remains, this is necessary for default value management');
  2995. CheckEquals(VAL_3, valBuffer^^);
  2996. valBuffer^^ := ''; FreeMem(valBuffer^,SizeOf(PSDOString));
  2997. end;
  2998. { TSDOBaseDataObject_Test }
  2999. class function TSDOBaseDataObject_Test.Create_Factory() : ISDODataFactory;
  3000. var
  3001. typ, typ2 : ISDOType;
  3002. begin
  3003. Result := TSDODataFactory.Create();
  3004. Result.AddType(s_URI_1,s_TYPE_1,[]);
  3005. Result.AddType(s_URI_1,s_TYPE_2,[]);
  3006. Result.AddType(s_URI_3,s_TYPE_3,[]);
  3007. typ := Result.getType(s_URI_1,s_TYPE_1);
  3008. Result.addProperty(typ,s_PROP_BOOL_1,sdo_namespace,'Boolean',[]);
  3009. Result.addProperty(typ,s_PROP_INTEGER_1,sdo_namespace,'Integer',[]);
  3010. Result.addProperty(typ,s_PROP_STR_1,sdo_namespace,'String',[]);
  3011. Result.addProperty(typ,s_PROP_BOOL_2,sdo_namespace,'Boolean',[]);
  3012. Result.addProperty(typ,s_PROP_INTEGER_2,sdo_namespace,'Integer',[]);
  3013. Result.addProperty(typ,s_PROP_STR_2,sdo_namespace,'String',[]);
  3014. Result.addProperty(typ,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[]);
  3015. Result.addProperty(typ,s_PROP_OBJ_REF,s_URI_1,s_TYPE_2,[]);
  3016. typ2 := Result.getType(s_URI_1,s_TYPE_2);
  3017. Result.addProperty(typ2,s_PROP_BOOL_A,sdo_namespace,'Boolean',[]);
  3018. Result.addProperty(typ2,s_PROP_INTEGER_A,sdo_namespace,'Integer',[]);
  3019. Result.addProperty(typ2,s_PROP_STR_A,sdo_namespace,'String',[]);
  3020. Result.addProperty(typ2,s_PROP_OBJ_CONT,s_URI_3,s_TYPE_3,[]);
  3021. end;
  3022. function TSDOBaseDataObject_Test.Create_Field() : ISDOField;
  3023. begin
  3024. Result := TSDOObjectField.Create() as ISDOField;
  3025. end;
  3026. procedure TSDOBaseDataObject_Test.getDataObject();
  3027. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3028. var
  3029. obj : ISDOField;
  3030. trueBuffer : array[0..200] of Byte;
  3031. buffer, tmpBuffer, startBuffer : PByte;
  3032. valBuffer : PPSDODataObject;
  3033. val_1, val_2, val_3 : ISDODataObject;
  3034. begin
  3035. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3036. buffer := @(trueBuffer[0]);
  3037. tmpBuffer := buffer;
  3038. startBuffer := tmpBuffer;
  3039. Inc(tmpBuffer);
  3040. valBuffer := PPSDODataObject(tmpBuffer);
  3041. obj := Create_Field();
  3042. val_1 := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3043. val_2 := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3044. val_3 := nil;
  3045. Check(nil = obj.getDataObject(buffer,F_OFFSET_0));
  3046. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3047. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3048. try
  3049. valBuffer^^ := val_1;
  3050. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3051. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3052. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3053. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3054. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3055. CheckEquals(PtrInt(VAL_1),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3056. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3057. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3058. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3059. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3060. CheckEquals(PtrInt(VAL_1),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3061. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3062. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3063. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3064. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3065. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3066. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3067. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3068. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3069. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3070. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3071. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3072. valBuffer^^ := val_2;
  3073. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3074. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3075. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3076. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3077. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3078. CheckEquals(PtrInt(val_2),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3079. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3080. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3081. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3082. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3083. CheckEquals(PtrInt(val_2),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3084. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3085. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3086. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3087. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3088. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3089. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3090. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3091. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3092. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3093. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3094. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3095. valBuffer^^ := val_3;
  3096. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3097. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3098. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3099. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3100. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3101. CheckEquals(PtrInt(val_3),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3102. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3103. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3104. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3105. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3106. CheckEquals(PtrInt(val_3),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3107. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3108. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3109. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3110. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3111. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3112. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3113. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3114. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3115. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3116. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3117. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_0)));
  3118. valBuffer^^ := nil;
  3119. finally
  3120. FreeMem(valBuffer^,SizeOf(PSDODataObject));
  3121. valBuffer^ := nil;
  3122. end;
  3123. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3124. startBuffer := tmpBuffer;
  3125. Inc(tmpBuffer);
  3126. valBuffer := PPSDODataObject(tmpBuffer);
  3127. Check(nil = obj.getDataObject(buffer,F_OFFSET_0));
  3128. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3129. try
  3130. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3131. valBuffer^^ := val_1;
  3132. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3133. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3134. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3135. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3136. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3137. CheckEquals(PtrInt(val_1),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3138. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3139. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3140. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3141. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3142. CheckEquals(PtrInt(val_1),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3143. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3144. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3145. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3146. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3147. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3148. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3149. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3150. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3151. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3152. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3153. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3154. valBuffer^^ := val_2;
  3155. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3156. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3157. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3158. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3159. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3160. CheckEquals(PtrInt(val_2),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3161. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3162. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3163. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3164. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3165. CheckEquals(PtrInt(val_2),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3166. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3167. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3168. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3169. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3170. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3171. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3172. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3173. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3174. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3175. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3176. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3177. valBuffer^^ := val_3;
  3178. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3179. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3180. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3181. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3182. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3183. CheckEquals(PtrInt(val_3),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3184. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3185. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3186. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3187. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3188. CheckEquals(PtrInt(val_3),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3189. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3190. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3191. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3192. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3193. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3194. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3195. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3196. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3197. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3198. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3199. CheckEquals(PtrInt(nil),PtrInt(obj.getDataObject(buffer,F_OFFSET_1)));
  3200. finally
  3201. FreeMem(valBuffer^,SizeOf(PSDODataObject));
  3202. valBuffer^ := nil;
  3203. end;
  3204. end;
  3205. procedure TSDOBaseDataObject_Test.setDataObject();
  3206. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3207. var
  3208. obj : ISDOField;
  3209. trueBuffer : array[0..200] of Byte;
  3210. buffer, tmpBuffer, startBuffer : PByte;
  3211. valBuffer : PPSDODataObject;
  3212. val_1, val_2, val_3 : ISDODataObject;
  3213. begin
  3214. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3215. buffer := @(trueBuffer[0]);
  3216. tmpBuffer := buffer;
  3217. startBuffer := tmpBuffer;
  3218. Inc(tmpBuffer);
  3219. valBuffer := PPSDODataObject(tmpBuffer);
  3220. obj := Create_Field();
  3221. val_1 := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3222. val_2 := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3223. val_3 := nil;
  3224. obj.setDataObject(buffer,F_OFFSET_0,nil);
  3225. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3226. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3227. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3228. obj.setDataObject(buffer,F_OFFSET_0,val_1);
  3229. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3230. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3231. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3232. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3233. Check(val_1 = valBuffer^^);
  3234. obj.setDataObject(buffer,F_OFFSET_0,val_2);
  3235. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3236. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3237. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3238. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3239. Check(val_2 = valBuffer^^);
  3240. obj.setDataObject(buffer,F_OFFSET_0,val_3);
  3241. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3242. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3243. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3244. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3245. Check(val_3 = valBuffer^^);
  3246. valBuffer^^ := nil;
  3247. FreeMem(valBuffer^,SizeOf(PSDODataObject));
  3248. valBuffer^ := nil;
  3249. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3250. startBuffer := tmpBuffer;
  3251. Inc(tmpBuffer);
  3252. valBuffer := PPSDODataObject(tmpBuffer);
  3253. obj.setDataObject(buffer,F_OFFSET_1,nil);
  3254. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3255. obj.setDataObject(buffer,F_OFFSET_1,val_1);
  3256. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3257. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3258. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3259. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3260. Check(val_1 = valBuffer^^);
  3261. obj.setDataObject(buffer,F_OFFSET_1,val_2);
  3262. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3263. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3264. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3265. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3266. Check(val_2 = valBuffer^^);
  3267. obj.setDataObject(buffer,F_OFFSET_1,val_3);
  3268. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3269. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3270. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3271. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3272. Check(val_3 = valBuffer^^);
  3273. valBuffer^^ := nil;
  3274. FreeMem(valBuffer^,SizeOf(PSDODataObject));
  3275. valBuffer^ := nil;
  3276. end;
  3277. procedure TSDOBaseDataObject_Test.setNull();
  3278. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3279. var
  3280. obj : ISDOField;
  3281. trueBuffer : array[0..200] of Byte;
  3282. buffer, tmpBuffer, startBuffer : PByte;
  3283. valBuffer : PPSDODataObject;
  3284. val_1, val_2, val_3 : ISDODataObject;
  3285. begin
  3286. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3287. buffer := @(trueBuffer[0]);
  3288. tmpBuffer := buffer;
  3289. startBuffer := tmpBuffer;
  3290. Inc(tmpBuffer);
  3291. valBuffer := PPSDODataObject(tmpBuffer);
  3292. obj := Create_Field();
  3293. val_1 := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3294. val_2 := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3295. val_3 := nil;
  3296. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3297. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3298. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3299. obj.setNull(buffer,F_OFFSET_0);
  3300. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3301. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3302. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3303. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3304. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3305. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3306. obj.setNull(buffer,F_OFFSET_0);
  3307. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3308. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3309. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3310. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3311. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3312. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3313. obj.setNull(buffer,F_OFFSET_0);
  3314. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3315. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3316. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3317. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3318. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3319. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3320. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3321. valBuffer^^ := val_1;
  3322. obj.setNull(buffer,F_OFFSET_0);
  3323. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3324. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3325. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3326. Check(valBuffer^ = nil);
  3327. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3328. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3329. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3330. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3331. valBuffer^^ := val_2;
  3332. obj.setNull(buffer,F_OFFSET_0);
  3333. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3334. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3335. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3336. Check(valBuffer^ = nil);
  3337. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3338. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3339. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3340. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3341. valBuffer^^ := val_3;
  3342. obj.setNull(buffer,F_OFFSET_0);
  3343. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3344. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3345. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3346. Check(valBuffer^ = nil);
  3347. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3348. startBuffer := tmpBuffer;
  3349. Inc(tmpBuffer);
  3350. valBuffer := PPSDODataObject(tmpBuffer);
  3351. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3352. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3353. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3354. obj.setNull(buffer,F_OFFSET_1);
  3355. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3356. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3357. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3358. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3359. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3360. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3361. obj.setNull(buffer,F_OFFSET_1);
  3362. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3363. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3364. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3365. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3366. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3367. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3368. obj.setNull(buffer,F_OFFSET_1);
  3369. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3370. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3371. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3372. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3373. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3374. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3375. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3376. valBuffer^^ := val_1;
  3377. obj.setNull(buffer,F_OFFSET_1);
  3378. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3379. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3380. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3381. Check(valBuffer^ = nil);
  3382. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3383. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3384. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3385. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3386. valBuffer^^ := val_2;
  3387. obj.setNull(buffer,F_OFFSET_1);
  3388. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3389. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3390. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3391. Check(valBuffer^ = nil);
  3392. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3393. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3394. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3395. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3396. valBuffer^^ := val_3;
  3397. obj.setNull(buffer,F_OFFSET_1);
  3398. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3399. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3400. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3401. Check(valBuffer^ = nil);
  3402. end;
  3403. procedure TSDOBaseDataObject_Test.SetUp();
  3404. begin
  3405. inherited;
  3406. FFactory := Create_Factory();
  3407. end;
  3408. procedure TSDOBaseDataObject_Test.TearDown;
  3409. begin
  3410. FFactory := nil;
  3411. inherited;
  3412. end;
  3413. procedure TSDOBaseDataObject_Test.unset();
  3414. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3415. var
  3416. obj : ISDOField;
  3417. trueBuffer : array[0..200] of Byte;
  3418. buffer, tmpBuffer, startBuffer : PByte;
  3419. valBuffer : PPSDODataObject;
  3420. val_1, val_2, val_3 : ISDODataObject;
  3421. begin
  3422. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3423. buffer := @(trueBuffer[0]);
  3424. tmpBuffer := buffer;
  3425. startBuffer := tmpBuffer;
  3426. Inc(tmpBuffer);
  3427. valBuffer := PPSDODataObject(tmpBuffer);
  3428. obj := Create_Field();
  3429. val_1 := FFactory.createNew(s_URI_1,s_TYPE_1) as ISDODataObject;
  3430. val_2 := FFactory.createNew(s_URI_1,s_TYPE_2) as ISDODataObject;
  3431. val_3 := nil;
  3432. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3433. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3434. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3435. obj.unset(buffer,F_OFFSET_0);
  3436. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3437. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3438. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3439. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3440. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3441. obj.unset(buffer,F_OFFSET_0);
  3442. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3443. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3444. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3445. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3446. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3447. obj.unset(buffer,F_OFFSET_0);
  3448. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3449. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3450. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3451. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3452. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3453. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3454. valBuffer^^ := val_1;
  3455. obj.unset(buffer,F_OFFSET_0);
  3456. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3457. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3458. Check(valBuffer^ = nil);
  3459. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3460. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3461. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3462. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3463. valBuffer^^ := val_2;
  3464. obj.unset(buffer,F_OFFSET_0);
  3465. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3466. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3467. Check(valBuffer^ = nil);
  3468. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3469. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3470. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3471. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3472. valBuffer^^ := val_3;
  3473. obj.unset(buffer,F_OFFSET_0);
  3474. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3475. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3476. Check(valBuffer^ = nil);
  3477. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3478. startBuffer := tmpBuffer;
  3479. Inc(tmpBuffer);
  3480. valBuffer := PPSDODataObject(tmpBuffer);
  3481. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3482. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3483. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3484. obj.unset(buffer,F_OFFSET_1);
  3485. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3486. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3487. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3488. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3489. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3490. obj.unset(buffer,F_OFFSET_1);
  3491. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3492. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3493. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3494. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3495. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3496. obj.unset(buffer,F_OFFSET_1);
  3497. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3498. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3499. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3500. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3501. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3502. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3503. valBuffer^^ := val_1;
  3504. obj.unset(buffer,F_OFFSET_1);
  3505. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  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.unset(buffer,F_OFFSET_1);
  3514. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3515. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3516. Check(valBuffer^ = nil);
  3517. GetMem(valBuffer^,SizeOf(PSDODataObject)); FillChar(valBuffer^^,SizeOf(ISDODataObject),#0);
  3518. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3519. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3520. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3521. valBuffer^^ := val_3;
  3522. obj.unset(buffer,F_OFFSET_1);
  3523. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3524. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3525. Check(valBuffer^ = nil);
  3526. end;
  3527. { TSDOChangeSummaryField_Test }
  3528. class function TSDOChangeSummaryField_Test.Create_Factory: ISDODataFactory;
  3529. var
  3530. typ, typ2 : ISDOType;
  3531. begin
  3532. Result := TSDODataFactory.Create();
  3533. Result.AddType(s_URI_1,s_TYPE_1,[]);
  3534. Result.AddType(s_URI_1,s_TYPE_2,[]);
  3535. Result.AddType(s_URI_3,s_TYPE_3,[]);
  3536. typ := Result.getType(s_URI_1,s_TYPE_1);
  3537. Result.addProperty(typ,s_PROP_BOOL_1,sdo_namespace,'Boolean',[]);
  3538. Result.addProperty(typ,s_PROP_INTEGER_1,sdo_namespace,'Integer',[]);
  3539. Result.addProperty(typ,s_PROP_STR_1,sdo_namespace,'String',[]);
  3540. Result.addProperty(typ,s_PROP_CHANGE_SUMMARY,sdo_namespace,'ChangeSummary',[pfIsReadOnly]);
  3541. Result.addProperty(typ,s_PROP_BOOL_2,sdo_namespace,'Boolean',[]);
  3542. Result.addProperty(typ,s_PROP_INTEGER_2,sdo_namespace,'Integer',[]);
  3543. Result.addProperty(typ,s_PROP_STR_2,sdo_namespace,'String',[]);
  3544. Result.addProperty(typ,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_2,[]);
  3545. Result.addProperty(typ,s_PROP_OBJ_REF,s_URI_1,s_TYPE_2,[]);
  3546. typ2 := Result.getType(s_URI_1,s_TYPE_2);
  3547. Result.addProperty(typ2,s_PROP_BOOL_A,sdo_namespace,'Boolean',[]);
  3548. Result.addProperty(typ2,s_PROP_INTEGER_A,sdo_namespace,'Integer',[]);
  3549. Result.addProperty(typ2,s_PROP_STR_A,sdo_namespace,'String',[]);
  3550. Result.addProperty(typ2,s_PROP_OBJ_CONT,s_URI_1,s_TYPE_1,[]);
  3551. end;
  3552. function TSDOChangeSummaryField_Test.Create_Field() : ISDOField;
  3553. begin
  3554. Result := TSDOChangeSummaryField.Create();
  3555. end;
  3556. procedure TSDOChangeSummaryField_Test.getChangeSummary();
  3557. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3558. var
  3559. obj : ISDOField;
  3560. trueBuffer : array[0..200] of Byte;
  3561. buffer, tmpBuffer, startBuffer : PByte;
  3562. valBuffer : PPSDOChangeSummary;
  3563. val_1, val_2, val_3 : ISDOChangeSummary;
  3564. begin
  3565. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3566. buffer := @(trueBuffer[0]);
  3567. tmpBuffer := buffer;
  3568. startBuffer := tmpBuffer;
  3569. Inc(tmpBuffer);
  3570. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3571. obj := Create_Field();
  3572. val_1 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create());;
  3573. val_2 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create());;
  3574. val_3 := nil;
  3575. Check(nil = obj.getChangeSummary(buffer,F_OFFSET_0));
  3576. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3577. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3578. try
  3579. valBuffer^^ := val_1;
  3580. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3581. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3582. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3583. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3584. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3585. CheckEquals(PtrInt(VAL_1),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3586. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3587. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3588. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3589. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3590. CheckEquals(PtrInt(VAL_1),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3591. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3592. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3593. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3594. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3595. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3596. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3597. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3598. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3599. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3600. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3601. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3602. valBuffer^^ := val_2;
  3603. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3604. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3605. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3606. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3607. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3608. CheckEquals(PtrInt(val_2),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3609. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3610. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3611. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3612. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3613. CheckEquals(PtrInt(val_2),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3614. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3615. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3616. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3617. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3618. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3619. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3620. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3621. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3622. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3623. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3624. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3625. valBuffer^^ := val_3;
  3626. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3627. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3628. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3629. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3630. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3631. CheckEquals(PtrInt(val_3),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3632. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3633. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3634. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3635. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3636. CheckEquals(PtrInt(val_3),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3637. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3638. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3639. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3640. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3641. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3642. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3643. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3644. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3645. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3646. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3647. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_0)));
  3648. valBuffer^^ := nil;
  3649. finally
  3650. FreeMem(valBuffer^,SizeOf(PSDOChangeSummary));
  3651. valBuffer^ := nil;
  3652. end;
  3653. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3654. startBuffer := tmpBuffer;
  3655. Inc(tmpBuffer);
  3656. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3657. Check(nil = obj.getChangeSummary(buffer,F_OFFSET_0));
  3658. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3659. try
  3660. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3661. valBuffer^^ := val_1;
  3662. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3663. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3664. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3665. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3666. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3667. CheckEquals(PtrInt(val_1),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3668. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3669. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3670. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3671. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3672. CheckEquals(PtrInt(val_1),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3673. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3674. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3675. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3676. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3677. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3678. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3679. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3680. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3681. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3682. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3683. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3684. valBuffer^^ := val_2;
  3685. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3686. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3687. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3688. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3689. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3690. CheckEquals(PtrInt(val_2),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3691. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3692. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3693. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3694. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3695. CheckEquals(PtrInt(val_2),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3696. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3697. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3698. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3699. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3700. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3701. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3702. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3703. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3704. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3705. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3706. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3707. valBuffer^^ := val_3;
  3708. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3709. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3710. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3711. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3712. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3713. CheckEquals(PtrInt(val_3),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3714. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3715. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3716. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3717. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3718. CheckEquals(PtrInt(val_3),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3719. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3720. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3721. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3722. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3723. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3724. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3725. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3726. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3727. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3728. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3729. CheckEquals(PtrInt(nil),PtrInt(obj.getChangeSummary(buffer,F_OFFSET_1)));
  3730. finally
  3731. valBuffer^^ := nil;
  3732. FreeMem(valBuffer^,SizeOf(PSDOChangeSummary));
  3733. valBuffer^ := nil;
  3734. end;
  3735. end;
  3736. procedure TSDOChangeSummaryField_Test.setChangeSummary();
  3737. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3738. var
  3739. obj : ISDOField;
  3740. trueBuffer : array[0..200] of Byte;
  3741. buffer, tmpBuffer, startBuffer : PByte;
  3742. valBuffer : PPSDOChangeSummary;
  3743. val_1, val_2, val_3 : ISDOChangeSummary;
  3744. begin
  3745. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3746. buffer := @(trueBuffer[0]);
  3747. tmpBuffer := buffer;
  3748. startBuffer := tmpBuffer;
  3749. Inc(tmpBuffer);
  3750. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3751. obj := Create_Field();
  3752. val_1 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  3753. val_2 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  3754. val_3 := nil;
  3755. obj.setChangeSummary(buffer,F_OFFSET_0,nil);
  3756. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3757. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3758. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3759. obj.setChangeSummary(buffer,F_OFFSET_0,val_1);
  3760. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3761. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3762. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3763. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3764. Check(val_1 = valBuffer^^);
  3765. obj.setChangeSummary(buffer,F_OFFSET_0,val_2);
  3766. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3767. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3768. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3769. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3770. Check(val_2 = valBuffer^^);
  3771. obj.setChangeSummary(buffer,F_OFFSET_0,val_3);
  3772. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3773. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3774. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3775. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3776. Check(val_3 = valBuffer^^);
  3777. valBuffer^^ := nil;
  3778. FreeMem(valBuffer^,SizeOf(PSDOChangeSummary));
  3779. valBuffer^ := nil;
  3780. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3781. startBuffer := tmpBuffer;
  3782. Inc(tmpBuffer);
  3783. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3784. obj.setChangeSummary(buffer,F_OFFSET_1,nil);
  3785. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3786. obj.setChangeSummary(buffer,F_OFFSET_1,val_1);
  3787. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3788. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3789. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3790. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3791. Check(val_1 = valBuffer^^);
  3792. obj.setChangeSummary(buffer,F_OFFSET_1,val_2);
  3793. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3794. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3795. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3796. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3797. Check(val_2 = valBuffer^^);
  3798. obj.setChangeSummary(buffer,F_OFFSET_1,val_3);
  3799. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3800. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  3801. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  3802. CheckEquals(True, ( valBuffer^ <> nil ), 'object buffer' );
  3803. Check(val_3 = valBuffer^^);
  3804. valBuffer^^ := nil;
  3805. FreeMem(valBuffer^,SizeOf(PSDOChangeSummary));
  3806. valBuffer^ := nil;
  3807. end;
  3808. procedure TSDOChangeSummaryField_Test.setNull();
  3809. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  3810. var
  3811. obj : ISDOField;
  3812. trueBuffer : array[0..200] of Byte;
  3813. buffer, tmpBuffer, startBuffer : PByte;
  3814. valBuffer : PPSDOChangeSummary;
  3815. val_1, val_2, val_3 : ISDOChangeSummary;
  3816. begin
  3817. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3818. buffer := @(trueBuffer[0]);
  3819. tmpBuffer := buffer;
  3820. startBuffer := tmpBuffer;
  3821. Inc(tmpBuffer);
  3822. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3823. obj := Create_Field();
  3824. val_1 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  3825. val_2 := TSDOChangeSummary.Create(TSDOChangedDataObjectList.Create()) as ISDOChangeSummary;
  3826. val_3 := nil;
  3827. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3828. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3829. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3830. obj.setNull(buffer,F_OFFSET_0);
  3831. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3832. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3833. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3834. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3835. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3836. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3837. obj.setNull(buffer,F_OFFSET_0);
  3838. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3839. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3840. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3841. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3842. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3843. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3844. obj.setNull(buffer,F_OFFSET_0);
  3845. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3846. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3847. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3848. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3849. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3850. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3851. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3852. valBuffer^^ := val_1;
  3853. obj.setNull(buffer,F_OFFSET_0);
  3854. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3855. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3856. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3857. Check(valBuffer^ = nil);
  3858. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3859. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3860. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3861. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3862. valBuffer^^ := val_2;
  3863. obj.setNull(buffer,F_OFFSET_0);
  3864. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3865. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3866. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3867. Check(valBuffer^ = nil);
  3868. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3869. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3870. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3871. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3872. valBuffer^^ := val_3;
  3873. obj.setNull(buffer,F_OFFSET_0);
  3874. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3875. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3876. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3877. Check(valBuffer^ = nil);
  3878. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  3879. startBuffer := tmpBuffer;
  3880. Inc(tmpBuffer);
  3881. valBuffer := PPSDOChangeSummary(tmpBuffer);
  3882. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3883. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3884. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3885. obj.setNull(buffer,F_OFFSET_1);
  3886. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3887. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3888. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3889. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3890. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3891. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3892. obj.setNull(buffer,F_OFFSET_1);
  3893. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3894. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3895. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3896. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3897. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3898. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3899. obj.setNull(buffer,F_OFFSET_1);
  3900. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3901. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3902. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3903. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3904. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3905. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3906. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3907. valBuffer^^ := val_1;
  3908. obj.setNull(buffer,F_OFFSET_1);
  3909. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3910. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3911. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3912. Check(valBuffer^ = nil);
  3913. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3914. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3915. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3916. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3917. valBuffer^^ := val_2;
  3918. obj.setNull(buffer,F_OFFSET_1);
  3919. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3920. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3921. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3922. Check(valBuffer^ = nil);
  3923. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3924. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3925. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3926. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3927. valBuffer^^ := val_3;
  3928. obj.setNull(buffer,F_OFFSET_1);
  3929. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_SET));
  3930. CheckEquals(True,IsBitON(startBuffer^,BIT_ORDER_NULL));
  3931. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3932. Check(valBuffer^ = nil);
  3933. end;
  3934. procedure TSDOChangeSummaryField_Test.SetUp;
  3935. begin
  3936. inherited;
  3937. FFactory := Create_Factory();
  3938. end;
  3939. procedure TSDOChangeSummaryField_Test.TearDown;
  3940. begin
  3941. FFactory := nil;
  3942. inherited;
  3943. end;
  3944. procedure TSDOChangeSummaryField_Test.unset();
  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. SetBit(startBuffer^,BIT_ORDER_SET,False);
  3964. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3965. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3966. obj.unset(buffer,F_OFFSET_0);
  3967. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3968. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3969. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3970. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3971. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3972. obj.unset(buffer,F_OFFSET_0);
  3973. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3974. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3975. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3976. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  3977. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  3978. obj.unset(buffer,F_OFFSET_0);
  3979. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3980. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3981. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3982. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3983. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3984. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3985. valBuffer^^ := val_1;
  3986. obj.unset(buffer,F_OFFSET_0);
  3987. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3988. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3989. Check(valBuffer^ = nil);
  3990. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  3991. SetBit(startBuffer^,BIT_ORDER_SET,True);
  3992. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  3993. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  3994. valBuffer^^ := val_2;
  3995. obj.unset(buffer,F_OFFSET_0);
  3996. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  3997. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  3998. Check(valBuffer^ = nil);
  3999. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4000. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4001. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4002. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4003. valBuffer^^ := val_3;
  4004. obj.unset(buffer,F_OFFSET_0);
  4005. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4006. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4007. Check(valBuffer^ = nil);
  4008. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  4009. startBuffer := tmpBuffer;
  4010. Inc(tmpBuffer);
  4011. valBuffer := PPSDOChangeSummary(tmpBuffer);
  4012. SetBit(startBuffer^,BIT_ORDER_SET,False);
  4013. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4014. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4015. obj.unset(buffer,F_OFFSET_1);
  4016. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4017. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4018. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4019. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4020. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4021. obj.unset(buffer,F_OFFSET_1);
  4022. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4023. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4024. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4025. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  4026. SetBit(startBuffer^,BIT_ORDER_BUFFER,False);
  4027. obj.unset(buffer,F_OFFSET_1);
  4028. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4029. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4030. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4031. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4032. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4033. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4034. valBuffer^^ := val_1;
  4035. obj.unset(buffer,F_OFFSET_1);
  4036. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4037. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4038. Check(valBuffer^ = nil);
  4039. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4040. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4041. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4042. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4043. valBuffer^^ := val_2;
  4044. obj.unset(buffer,F_OFFSET_1);
  4045. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4046. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4047. Check(valBuffer^ = nil);
  4048. GetMem(valBuffer^,SizeOf(PSDOChangeSummary)); FillChar(valBuffer^^,SizeOf(ISDOChangeSummary),#0);
  4049. SetBit(startBuffer^,BIT_ORDER_SET,True);
  4050. SetBit(startBuffer^,BIT_ORDER_NULL,False);
  4051. SetBit(startBuffer^,BIT_ORDER_BUFFER,True);
  4052. valBuffer^^ := val_3;
  4053. obj.unset(buffer,F_OFFSET_1);
  4054. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_SET));
  4055. CheckEquals(False,IsBitON(startBuffer^,BIT_ORDER_BUFFER));
  4056. Check(valBuffer^ = nil);
  4057. end;
  4058. { TSDOByteField_Test }
  4059. function TSDOByteField_Test.Create_Field() : ISDOField;
  4060. begin
  4061. Result := TSDOByteField.Create();
  4062. end;
  4063. procedure TSDOByteField_Test.getBoolean();
  4064. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4065. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4066. var
  4067. obj : ISDOField;
  4068. intVal : QWord;
  4069. buffer, tmpBuffer, attributeBuffer : PByte;
  4070. valBuffer : PByte;
  4071. begin
  4072. intVal := 0;
  4073. buffer := @intVal;
  4074. tmpBuffer := buffer;
  4075. attributeBuffer := buffer;
  4076. Inc(tmpBuffer);
  4077. valBuffer := PByte(tmpBuffer);
  4078. obj := Create_Field();
  4079. valBuffer^ := VAL_1;
  4080. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4081. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4082. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  4083. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4084. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4085. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  4086. valBuffer^ := VAL_2;
  4087. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4088. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4089. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  4090. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4091. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4092. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  4093. valBuffer^ := VAL_3;
  4094. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4095. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4096. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  4097. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4098. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4099. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  4100. intVal := 0;
  4101. Inc(tmpBuffer);
  4102. Inc(attributeBuffer);
  4103. valBuffer := PByte(tmpBuffer);
  4104. valBuffer^ := VAL_1;
  4105. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4106. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4107. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  4108. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4109. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4110. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  4111. valBuffer^ := VAL_2;
  4112. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4113. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4114. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  4115. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4116. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4117. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  4118. valBuffer^ := VAL_3;
  4119. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4120. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4121. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  4122. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4123. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4124. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  4125. end;
  4126. procedure TSDOByteField_Test.getByte;
  4127. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4128. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4129. var
  4130. obj : ISDOField;
  4131. intVal : QWord;
  4132. buffer, tmpBuffer, attributeBuffer : PByte;
  4133. valBuffer : PByte;
  4134. begin
  4135. intVal := 0;
  4136. buffer := @intVal;
  4137. tmpBuffer := buffer;
  4138. attributeBuffer := buffer;
  4139. Inc(tmpBuffer);
  4140. valBuffer := PByte(tmpBuffer);
  4141. obj := Create_Field();
  4142. valBuffer^ := VAL_1;
  4143. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4144. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4145. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4146. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4147. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  4148. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4149. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4150. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4151. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4152. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  4153. valBuffer^ := VAL_2;
  4154. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4155. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4156. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4157. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4158. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  4159. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4160. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4161. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4162. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4163. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  4164. valBuffer^ := VAL_3;
  4165. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4166. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4167. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4168. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4169. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  4170. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4171. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4172. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  4173. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4174. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  4175. intVal := 0;
  4176. Inc(tmpBuffer);
  4177. Inc(attributeBuffer);
  4178. valBuffer := PByte(tmpBuffer);
  4179. valBuffer^ := VAL_1;
  4180. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4181. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4182. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4183. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4184. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  4185. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4186. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4187. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4188. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4189. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  4190. valBuffer^ := VAL_2;
  4191. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4192. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4193. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4194. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4195. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  4196. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4197. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4198. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4199. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4200. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  4201. valBuffer^ := VAL_3;
  4202. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4203. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4204. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4205. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4206. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  4207. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4208. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4209. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  4210. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4211. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  4212. end;
  4213. procedure TSDOByteField_Test.getCharacter();
  4214. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4215. VAL_1 = Ord(TSDOChar(125)); VAL_2 = Ord(TSDOChar(45)); VAL_3 = 0;
  4216. var
  4217. obj : ISDOField;
  4218. intVal : QWord;
  4219. buffer, tmpBuffer, attributeBuffer : PByte;
  4220. valBuffer : PByte;
  4221. begin
  4222. intVal := 0;
  4223. buffer := @intVal;
  4224. tmpBuffer := buffer;
  4225. attributeBuffer := buffer;
  4226. Inc(tmpBuffer);
  4227. valBuffer := PByte(tmpBuffer);
  4228. obj := Create_Field();
  4229. valBuffer^ := VAL_1;
  4230. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4231. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4232. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  4233. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4234. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4235. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  4236. valBuffer^ := VAL_2;
  4237. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4238. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4239. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  4240. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4241. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4242. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  4243. valBuffer^ := VAL_3;
  4244. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4245. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4246. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  4247. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4248. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4249. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  4250. intVal := 0;
  4251. Inc(tmpBuffer);
  4252. Inc(attributeBuffer);
  4253. valBuffer := PByte(tmpBuffer);
  4254. valBuffer^ := VAL_1;
  4255. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4256. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4257. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  4258. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4259. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4260. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  4261. valBuffer^ := VAL_2;
  4262. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4263. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4264. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  4265. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4266. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4267. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  4268. valBuffer^ := VAL_3;
  4269. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4270. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4271. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  4272. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4273. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4274. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  4275. end;
  4276. procedure TSDOByteField_Test.getInteger();
  4277. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4278. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4279. var
  4280. obj : ISDOField;
  4281. intVal : QWord;
  4282. buffer, tmpBuffer, attributeBuffer : PByte;
  4283. valBuffer : PByte;
  4284. begin
  4285. intVal := 0;
  4286. buffer := @intVal;
  4287. tmpBuffer := buffer;
  4288. attributeBuffer := buffer;
  4289. Inc(tmpBuffer);
  4290. valBuffer := PByte(tmpBuffer);
  4291. obj := Create_Field();
  4292. valBuffer^ := VAL_1;
  4293. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4294. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4295. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4296. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4297. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  4298. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4299. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4300. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4301. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4302. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  4303. valBuffer^ := VAL_2;
  4304. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4305. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4306. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4307. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4308. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  4309. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4310. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4311. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4312. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4313. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  4314. valBuffer^ := VAL_3;
  4315. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4316. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4317. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4318. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4319. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  4320. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4321. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4322. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  4323. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4324. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  4325. intVal := 0;
  4326. Inc(tmpBuffer);
  4327. Inc(attributeBuffer);
  4328. valBuffer := PByte(tmpBuffer);
  4329. valBuffer^ := VAL_1;
  4330. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4331. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4332. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4333. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4334. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  4335. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4336. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4337. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4338. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4339. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  4340. valBuffer^ := VAL_2;
  4341. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4342. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4343. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4344. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4345. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  4346. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4347. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4348. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4349. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4350. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  4351. valBuffer^ := VAL_3;
  4352. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4353. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4354. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4355. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4356. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  4357. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4358. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4359. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  4360. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4361. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  4362. end;
  4363. procedure TSDOByteField_Test.getLong();
  4364. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4365. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4366. var
  4367. obj : ISDOField;
  4368. intVal : QWord;
  4369. buffer, tmpBuffer, attributeBuffer : PByte;
  4370. valBuffer : PByte;
  4371. begin
  4372. intVal := 0;
  4373. buffer := @intVal;
  4374. tmpBuffer := buffer;
  4375. attributeBuffer := buffer;
  4376. Inc(tmpBuffer);
  4377. valBuffer := PByte(tmpBuffer);
  4378. obj := Create_Field();
  4379. valBuffer^ := VAL_1;
  4380. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4381. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4382. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4383. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4384. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  4385. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4386. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4387. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4388. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4389. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  4390. valBuffer^ := VAL_2;
  4391. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4392. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4393. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4394. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4395. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  4396. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4397. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4398. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4399. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4400. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  4401. valBuffer^ := VAL_3;
  4402. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4403. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4404. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4405. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4406. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  4407. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4408. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4409. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  4410. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4411. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  4412. intVal := 0;
  4413. Inc(tmpBuffer);
  4414. Inc(attributeBuffer);
  4415. valBuffer := PByte(tmpBuffer);
  4416. valBuffer^ := VAL_1;
  4417. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4418. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4419. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4420. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4421. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  4422. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4423. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4424. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4425. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4426. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  4427. valBuffer^ := VAL_2;
  4428. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4429. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4430. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4431. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4432. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  4433. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4434. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4435. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4436. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4437. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  4438. valBuffer^ := VAL_3;
  4439. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4440. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4441. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4442. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4443. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  4444. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4445. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4446. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  4447. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4448. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  4449. end;
  4450. procedure TSDOByteField_Test.getShort();
  4451. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4452. VAL_1 = 123; VAL_2 = 55; VAL_3 = 0;
  4453. var
  4454. obj : ISDOField;
  4455. intVal : QWord;
  4456. buffer, tmpBuffer, attributeBuffer : PByte;
  4457. valBuffer : PByte;
  4458. begin
  4459. intVal := 0;
  4460. buffer := @intVal;
  4461. tmpBuffer := buffer;
  4462. attributeBuffer := buffer;
  4463. Inc(tmpBuffer);
  4464. valBuffer := PByte(tmpBuffer);
  4465. obj := Create_Field();
  4466. valBuffer^ := VAL_1;
  4467. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4468. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4469. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4470. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4471. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  4472. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4473. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4474. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4475. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4476. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  4477. valBuffer^ := VAL_2;
  4478. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4479. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4480. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4481. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4482. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  4483. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4484. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4485. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4486. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4487. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  4488. valBuffer^ := VAL_3;
  4489. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4490. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4491. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4492. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4493. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  4494. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4495. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4496. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  4497. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4498. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  4499. intVal := 0;
  4500. Inc(tmpBuffer);
  4501. Inc(attributeBuffer);
  4502. valBuffer := PByte(tmpBuffer);
  4503. valBuffer^ := VAL_1;
  4504. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4505. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4506. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4507. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4508. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  4509. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4510. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4511. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4512. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4513. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  4514. valBuffer^ := VAL_2;
  4515. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4516. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4517. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4518. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4519. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  4520. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4521. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4522. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4523. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4524. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  4525. valBuffer^ := VAL_3;
  4526. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4527. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4528. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4529. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4530. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  4531. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4532. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4533. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  4534. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4535. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  4536. end;
  4537. procedure TSDOByteField_Test.getString();
  4538. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4539. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4540. var
  4541. obj : ISDOField;
  4542. intVal : QWord;
  4543. buffer, tmpBuffer, attributeBuffer : PByte;
  4544. valBuffer : PByte;
  4545. begin
  4546. intVal := 0;
  4547. buffer := @intVal;
  4548. tmpBuffer := buffer;
  4549. attributeBuffer := buffer;
  4550. Inc(tmpBuffer);
  4551. valBuffer := PByte(tmpBuffer);
  4552. obj := Create_Field();
  4553. valBuffer^ := VAL_1;
  4554. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4555. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4556. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  4557. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4558. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4559. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  4560. valBuffer^ := VAL_2;
  4561. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4562. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4563. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  4564. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4565. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4566. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  4567. valBuffer^ := VAL_3;
  4568. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4569. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4570. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  4571. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4572. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4573. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  4574. intVal := 0;
  4575. Inc(tmpBuffer);
  4576. Inc(attributeBuffer);
  4577. valBuffer := PByte(tmpBuffer);
  4578. valBuffer^ := VAL_1;
  4579. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4580. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4581. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  4582. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4583. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4584. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  4585. valBuffer^ := VAL_2;
  4586. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4587. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4588. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  4589. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4590. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4591. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  4592. valBuffer^ := VAL_3;
  4593. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4594. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4595. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  4596. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4597. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4598. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  4599. end;
  4600. procedure TSDOByteField_Test.setBoolean();
  4601. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4602. var
  4603. obj : ISDOField;
  4604. intVal : QWord;
  4605. buffer, tmpBuffer, attributeBuffer : PByte;
  4606. valBuffer : PByte;
  4607. begin
  4608. intVal := 0;
  4609. buffer := @intVal;
  4610. tmpBuffer := buffer;
  4611. attributeBuffer := buffer;
  4612. Inc(tmpBuffer);
  4613. valBuffer := PByte(tmpBuffer);
  4614. obj := Create_Field();
  4615. obj.setBoolean(buffer,F_OFFSET_0,True);
  4616. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4617. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4618. CheckEquals(1,valBuffer^);
  4619. obj.setBoolean(buffer,F_OFFSET_0,False);
  4620. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4621. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4622. CheckEquals(0,valBuffer^);
  4623. intVal := 0;
  4624. Inc(tmpBuffer);
  4625. Inc(attributeBuffer);
  4626. valBuffer := PByte(tmpBuffer);
  4627. obj.setBoolean(buffer,F_OFFSET_1,True);
  4628. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4629. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4630. CheckEquals(1,valBuffer^);
  4631. obj.setBoolean(buffer,F_OFFSET_1,False);
  4632. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4633. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4634. CheckEquals(0,valBuffer^);
  4635. end;
  4636. procedure TSDOByteField_Test.setByte();
  4637. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4638. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4639. var
  4640. obj : ISDOField;
  4641. intVal : QWord;
  4642. buffer, tmpBuffer, attributeBuffer : PByte;
  4643. valBuffer : PByte;
  4644. begin
  4645. intVal := 0;
  4646. buffer := @intVal;
  4647. tmpBuffer := buffer;
  4648. attributeBuffer := buffer;
  4649. Inc(tmpBuffer);
  4650. valBuffer := PByte(tmpBuffer);
  4651. obj := Create_Field();
  4652. obj.setByte(buffer,F_OFFSET_0,VAL_1);
  4653. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4654. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4655. CheckEquals(VAL_1,valBuffer^);
  4656. obj.setByte(buffer,F_OFFSET_0,VAL_2);
  4657. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4658. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4659. CheckEquals(VAL_2,valBuffer^);
  4660. obj.setByte(buffer,F_OFFSET_0,VAL_3);
  4661. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4662. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4663. CheckEquals(VAL_3,valBuffer^);
  4664. intVal := 0;
  4665. Inc(tmpBuffer);
  4666. Inc(attributeBuffer);
  4667. valBuffer := PByte(tmpBuffer);
  4668. obj.setByte(buffer,F_OFFSET_1,VAL_1);
  4669. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4670. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4671. CheckEquals(VAL_1,valBuffer^);
  4672. obj.setByte(buffer,F_OFFSET_1,VAL_2);
  4673. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4674. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4675. CheckEquals(VAL_2,valBuffer^);
  4676. obj.setByte(buffer,F_OFFSET_1,VAL_3);
  4677. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4678. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4679. CheckEquals(VAL_3,valBuffer^);
  4680. end;
  4681. procedure TSDOByteField_Test.setCharacter();
  4682. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4683. VAL_1 = Ord(TSDOChar(125)); VAL_2 = Ord(TSDOChar(45)); VAL_3 = 0;
  4684. var
  4685. obj : ISDOField;
  4686. intVal : QWord;
  4687. buffer, tmpBuffer, attributeBuffer : PByte;
  4688. valBuffer : PByte;
  4689. begin
  4690. intVal := 0;
  4691. buffer := @intVal;
  4692. tmpBuffer := buffer;
  4693. attributeBuffer := buffer;
  4694. Inc(tmpBuffer);
  4695. valBuffer := PByte(tmpBuffer);
  4696. obj := Create_Field();
  4697. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_1));
  4698. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4699. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4700. CheckEquals(VAL_1,valBuffer^);
  4701. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_2));
  4702. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4703. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4704. CheckEquals(VAL_2,valBuffer^);
  4705. intVal := 0;
  4706. Inc(tmpBuffer);
  4707. Inc(attributeBuffer);
  4708. valBuffer := PByte(tmpBuffer);
  4709. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_1));
  4710. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4711. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4712. CheckEquals(VAL_1,valBuffer^);
  4713. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_2));
  4714. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4715. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4716. CheckEquals(VAL_2,valBuffer^);
  4717. end;
  4718. procedure TSDOByteField_Test.setInteger();
  4719. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4720. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4721. var
  4722. obj : ISDOField;
  4723. intVal : QWord;
  4724. buffer, tmpBuffer, attributeBuffer : PByte;
  4725. valBuffer : PByte;
  4726. begin
  4727. intVal := 0;
  4728. buffer := @intVal;
  4729. tmpBuffer := buffer;
  4730. attributeBuffer := buffer;
  4731. Inc(tmpBuffer);
  4732. valBuffer := PByte(tmpBuffer);
  4733. obj := Create_Field();
  4734. obj.setInteger(buffer,F_OFFSET_0,VAL_1);
  4735. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4736. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4737. CheckEquals(VAL_1,valBuffer^);
  4738. obj.setInteger(buffer,F_OFFSET_0,VAL_2);
  4739. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4740. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4741. CheckEquals(VAL_2,valBuffer^);
  4742. obj.setInteger(buffer,F_OFFSET_0,VAL_3);
  4743. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4744. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4745. CheckEquals(VAL_3,valBuffer^);
  4746. intVal := 0;
  4747. Inc(tmpBuffer);
  4748. Inc(attributeBuffer);
  4749. valBuffer := PByte(tmpBuffer);
  4750. obj.setInteger(buffer,F_OFFSET_1,VAL_1);
  4751. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4752. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4753. CheckEquals(VAL_1,valBuffer^);
  4754. obj.setInteger(buffer,F_OFFSET_1,VAL_2);
  4755. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4756. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4757. CheckEquals(VAL_2,valBuffer^);
  4758. obj.setInteger(buffer,F_OFFSET_1,VAL_3);
  4759. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4760. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4761. CheckEquals(VAL_3,valBuffer^);
  4762. end;
  4763. procedure TSDOByteField_Test.setLong();
  4764. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4765. VAL_1 = 123; VAL_2 = 35; VAL_3 = 0;
  4766. var
  4767. obj : ISDOField;
  4768. intVal : QWord;
  4769. buffer, tmpBuffer, attributeBuffer : PByte;
  4770. valBuffer : PByte;
  4771. begin
  4772. intVal := 0;
  4773. buffer := @intVal;
  4774. tmpBuffer := buffer;
  4775. attributeBuffer := buffer;
  4776. Inc(tmpBuffer);
  4777. valBuffer := PByte(tmpBuffer);
  4778. obj := Create_Field();
  4779. obj.setLong(buffer,F_OFFSET_0,VAL_1);
  4780. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4781. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4782. CheckEquals(VAL_1,valBuffer^);
  4783. obj.setLong(buffer,F_OFFSET_0,VAL_2);
  4784. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4785. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4786. CheckEquals(VAL_2,valBuffer^);
  4787. obj.setLong(buffer,F_OFFSET_0,VAL_3);
  4788. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4789. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4790. CheckEquals(VAL_3,valBuffer^);
  4791. intVal := 0;
  4792. Inc(tmpBuffer);
  4793. Inc(attributeBuffer);
  4794. valBuffer := PByte(tmpBuffer);
  4795. obj.setLong(buffer,F_OFFSET_1,VAL_1);
  4796. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4797. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4798. CheckEquals(VAL_1,valBuffer^);
  4799. obj.setLong(buffer,F_OFFSET_1,VAL_2);
  4800. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4801. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4802. CheckEquals(VAL_2,valBuffer^);
  4803. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  4804. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4805. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4806. CheckEquals(VAL_3,valBuffer^);
  4807. end;
  4808. procedure TSDOByteField_Test.setShort();
  4809. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4810. VAL_1 = 123; VAL_2 = 35; VAL_3 = 0;
  4811. var
  4812. obj : ISDOField;
  4813. intVal : QWord;
  4814. buffer, tmpBuffer, attributeBuffer : PByte;
  4815. valBuffer : PByte;
  4816. begin
  4817. intVal := 0;
  4818. buffer := @intVal;
  4819. tmpBuffer := buffer;
  4820. attributeBuffer := buffer;
  4821. Inc(tmpBuffer);
  4822. valBuffer := PByte(tmpBuffer);
  4823. obj := Create_Field();
  4824. obj.setShort(buffer,F_OFFSET_0,VAL_1);
  4825. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4826. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4827. CheckEquals(VAL_1,valBuffer^);
  4828. obj.setShort(buffer,F_OFFSET_0,VAL_2);
  4829. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4830. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4831. CheckEquals(VAL_2,valBuffer^);
  4832. obj.setShort(buffer,F_OFFSET_0,VAL_3);
  4833. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4834. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4835. CheckEquals(VAL_3,valBuffer^);
  4836. intVal := 0;
  4837. Inc(tmpBuffer);
  4838. Inc(attributeBuffer);
  4839. valBuffer := PByte(tmpBuffer);
  4840. obj.setShort(buffer,F_OFFSET_1,VAL_1);
  4841. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4842. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4843. CheckEquals(VAL_1,valBuffer^);
  4844. obj.setShort(buffer,F_OFFSET_1,VAL_2);
  4845. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4846. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4847. CheckEquals(VAL_2,valBuffer^);
  4848. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  4849. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4850. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4851. CheckEquals(VAL_3,valBuffer^);
  4852. end;
  4853. procedure TSDOByteField_Test.setString();
  4854. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4855. VAL_1 = 123; VAL_2 = 45; VAL_3 = 0;
  4856. var
  4857. obj : ISDOField;
  4858. intVal : QWord;
  4859. buffer, tmpBuffer, attributeBuffer : PByte;
  4860. valBuffer : PByte;
  4861. begin
  4862. intVal := 0;
  4863. buffer := @intVal;
  4864. tmpBuffer := buffer;
  4865. attributeBuffer := buffer;
  4866. Inc(tmpBuffer);
  4867. valBuffer := PByte(tmpBuffer);
  4868. obj := Create_Field();
  4869. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_1));
  4870. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4871. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4872. CheckEquals(VAL_1,valBuffer^);
  4873. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_2));
  4874. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4875. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4876. CheckEquals(VAL_2,valBuffer^);
  4877. intVal := 0;
  4878. Inc(tmpBuffer);
  4879. Inc(attributeBuffer);
  4880. valBuffer := PByte(tmpBuffer);
  4881. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_1));
  4882. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4883. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4884. CheckEquals(VAL_1,valBuffer^);
  4885. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_2));
  4886. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  4887. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  4888. CheckEquals(VAL_2,valBuffer^);
  4889. end;
  4890. { TSDODateField_Test }
  4891. procedure TSDODateField_Test.CheckEquals(expected, actual: TSDODate; msg: string; const AStrict : Boolean);
  4892. var
  4893. e, a : TDateTime;
  4894. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  4895. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  4896. begin
  4897. if AStrict then begin
  4898. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  4899. end else begin
  4900. e := NormalizeToUTC(expected);
  4901. a := NormalizeToUTC(actual);
  4902. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  4903. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  4904. CheckEquals(e_y,a_y,msg);
  4905. CheckEquals(e_m,a_m,msg);
  4906. CheckEquals(e_d,a_d,msg);
  4907. CheckEquals(e_h,a_h,msg);
  4908. CheckEquals(e_mn,a_mn,msg);
  4909. CheckEquals(e_ss,a_ss,msg);
  4910. CheckEquals(e_ms,a_ms,msg);
  4911. end;
  4912. end;
  4913. function TSDODateField_Test.Create_Field() : ISDOField;
  4914. begin
  4915. Result := TSDODateField.Create() as ISDOField;
  4916. end;
  4917. procedure TSDODateField_Test.getDate();
  4918. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  4919. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4920. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4921. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4922. procedure SetConstants();
  4923. var
  4924. d : TSDODate;
  4925. begin
  4926. FillChar(d,SizeOf(TSDODate),#0);
  4927. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  4928. d.HourOffset := 5;
  4929. d.MinuteOffset := 6;
  4930. PSDODate(@VAL_1)^ := d;
  4931. FillChar(d,SizeOf(TSDODate),#0);
  4932. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  4933. d.HourOffset := 0;
  4934. d.MinuteOffset := 13;
  4935. PSDODate(@VAL_3)^ := d;
  4936. end;
  4937. var
  4938. obj : ISDOField;
  4939. trueBuffer : array[0..( 3 * SizeOf(TSDODate))] of Byte;
  4940. buffer, tmpBuffer, attributeBuffer : PByte;
  4941. valBuffer : PSDODate;
  4942. begin
  4943. SetConstants();
  4944. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  4945. buffer := @(trueBuffer[0]);
  4946. tmpBuffer := buffer;
  4947. attributeBuffer := buffer;
  4948. Inc(tmpBuffer);
  4949. valBuffer := PSDODate(tmpBuffer);
  4950. obj := Create_Field();
  4951. valBuffer^ := VAL_1;
  4952. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4953. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4954. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  4955. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4956. CheckEquals(VAL_1,obj.getDate(buffer,F_OFFSET_0));
  4957. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4958. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4959. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  4960. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4961. CheckEquals(VAL_1,obj.getDate(buffer,F_OFFSET_0));
  4962. valBuffer^ := VAL_2;
  4963. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4964. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4965. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  4966. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4967. CheckEquals(VAL_2,obj.getDate(buffer,F_OFFSET_0));
  4968. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4969. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4970. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  4971. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4972. CheckEquals(VAL_2,obj.getDate(buffer,F_OFFSET_0));
  4973. valBuffer^ := VAL_3;
  4974. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4975. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4976. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  4977. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4978. CheckEquals(VAL_3,obj.getDate(buffer,F_OFFSET_0));
  4979. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4980. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4981. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_0));
  4982. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4983. CheckEquals(VAL_3,obj.getDate(buffer,F_OFFSET_0));
  4984. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  4985. Inc(tmpBuffer);
  4986. Inc(attributeBuffer);
  4987. valBuffer := PSDODate(tmpBuffer);
  4988. valBuffer^ := VAL_1;
  4989. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  4990. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4991. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  4992. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4993. CheckEquals(VAL_1,obj.getDate(buffer,F_OFFSET_1));
  4994. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  4995. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  4996. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  4997. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  4998. CheckEquals(VAL_1,obj.getDate(buffer,F_OFFSET_1));
  4999. valBuffer^ := VAL_2;
  5000. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5001. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5002. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5003. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5004. CheckEquals(VAL_2,obj.getDate(buffer,F_OFFSET_1));
  5005. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5006. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5007. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5008. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5009. CheckEquals(VAL_2,obj.getDate(buffer,F_OFFSET_1));
  5010. valBuffer^ := VAL_3;
  5011. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5012. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5013. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5014. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5015. CheckEquals(VAL_3,obj.getDate(buffer,F_OFFSET_1));
  5016. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5017. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5018. CheckEquals(ZERO_DATE,obj.getDate(buffer,F_OFFSET_1));
  5019. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5020. CheckEquals(VAL_3,obj.getDate(buffer,F_OFFSET_1));
  5021. end;
  5022. procedure TSDODateField_Test.getString();
  5023. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5024. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5025. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5026. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5027. procedure SetConstants();
  5028. var
  5029. d : TSDODate;
  5030. begin
  5031. FillChar(d,SizeOf(TSDODate),#0);
  5032. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5033. d.HourOffset := 5;
  5034. d.MinuteOffset := 6;
  5035. PSDODate(@VAL_1)^ := d;
  5036. FillChar(d,SizeOf(TSDODate),#0);
  5037. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5038. d.HourOffset := 0;
  5039. d.MinuteOffset := 13;
  5040. PSDODate(@VAL_3)^ := d;
  5041. end;
  5042. var
  5043. obj : ISDOField;
  5044. trueBuffer : array[0..( 3 * SizeOf(TSDODate))] of Byte;
  5045. buffer, tmpBuffer, attributeBuffer : PByte;
  5046. valBuffer : PSDODate;
  5047. begin
  5048. SetConstants();
  5049. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5050. buffer := @(trueBuffer[0]);
  5051. tmpBuffer := buffer;
  5052. attributeBuffer := buffer;
  5053. Inc(tmpBuffer);
  5054. valBuffer := PSDODate(tmpBuffer);
  5055. obj := Create_Field();
  5056. valBuffer^ := VAL_1;
  5057. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5058. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5059. CheckEquals(xsd_DateTimeToStr(VAL_1,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5060. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5061. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5062. CheckEquals(xsd_DateTimeToStr(VAL_1,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5063. valBuffer^ := VAL_2;
  5064. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5065. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5066. CheckEquals(xsd_DateTimeToStr(VAL_2,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5067. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5068. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5069. CheckEquals(xsd_DateTimeToStr(VAL_2,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5070. valBuffer^ := VAL_3;
  5071. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5072. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5073. CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5074. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5075. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5076. CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_0));
  5077. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5078. Inc(tmpBuffer);
  5079. Inc(attributeBuffer);
  5080. valBuffer := PSDODate(tmpBuffer);
  5081. valBuffer^ := VAL_1;
  5082. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5083. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5084. CheckEquals(xsd_DateTimeToStr(VAL_1,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5085. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5086. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5087. CheckEquals(xsd_DateTimeToStr(VAL_1,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5088. valBuffer^ := VAL_2;
  5089. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5090. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5091. CheckEquals(xsd_DateTimeToStr(VAL_2,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5092. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5093. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5094. CheckEquals(xsd_DateTimeToStr(VAL_2,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5095. valBuffer^ := VAL_3;
  5096. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5097. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5098. CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5099. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5100. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5101. CheckEquals(xsd_DateTimeToStr(VAL_3,xdkDateTime),obj.getString(buffer,F_OFFSET_1));
  5102. end;
  5103. procedure TSDODateField_Test.setDate();
  5104. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5105. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5106. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5107. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5108. procedure SetConstants();
  5109. var
  5110. d : TSDODate;
  5111. begin
  5112. FillChar(d,SizeOf(TSDODate),#0);
  5113. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5114. d.HourOffset := 5;
  5115. d.MinuteOffset := 6;
  5116. PSDODate(@VAL_1)^ := d;
  5117. FillChar(d,SizeOf(TSDODate),#0);
  5118. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5119. d.HourOffset := 0;
  5120. d.MinuteOffset := 13;
  5121. PSDODate(@VAL_3)^ := d;
  5122. end;
  5123. var
  5124. obj : ISDOField;
  5125. trueBuffer : array[0..( 3 * SizeOf(TSDODate))] of Byte;
  5126. buffer, tmpBuffer, attributeBuffer : PByte;
  5127. valBuffer : PSDODate;
  5128. begin
  5129. SetConstants();
  5130. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5131. buffer := @(trueBuffer[0]);
  5132. tmpBuffer := buffer;
  5133. attributeBuffer := buffer;
  5134. Inc(tmpBuffer);
  5135. valBuffer := PSDODate(tmpBuffer);
  5136. obj := Create_Field();
  5137. obj.setDate(buffer,F_OFFSET_0,VAL_1);
  5138. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5139. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5140. CheckEquals(VAL_1,valBuffer^);
  5141. obj.setDate(buffer,F_OFFSET_0,VAL_2);
  5142. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5143. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5144. CheckEquals(VAL_2,valBuffer^);
  5145. obj.setDate(buffer,F_OFFSET_0,VAL_3);
  5146. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5147. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5148. CheckEquals(VAL_3,valBuffer^);
  5149. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5150. Inc(tmpBuffer);
  5151. Inc(attributeBuffer);
  5152. valBuffer := PSDODate(tmpBuffer);
  5153. obj.setDate(buffer,F_OFFSET_1,VAL_1);
  5154. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5155. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5156. CheckEquals(VAL_1,valBuffer^);
  5157. obj.setDate(buffer,F_OFFSET_1,VAL_2);
  5158. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5159. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5160. CheckEquals(VAL_2,valBuffer^);
  5161. obj.setDate(buffer,F_OFFSET_1,VAL_3);
  5162. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5163. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5164. CheckEquals(VAL_3,valBuffer^);
  5165. end;
  5166. procedure TSDODateField_Test.setString();
  5167. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5168. VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5169. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5170. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5171. procedure SetConstants();
  5172. var
  5173. d : TSDODate;
  5174. begin
  5175. FillChar(d,SizeOf(TSDODate),#0);
  5176. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5177. d.HourOffset := 5;
  5178. d.MinuteOffset := 6;
  5179. PSDODate(@VAL_1)^ := d;
  5180. FillChar(d,SizeOf(TSDODate),#0);
  5181. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5182. d.HourOffset := 0;
  5183. d.MinuteOffset := 13;
  5184. PSDODate(@VAL_3)^ := d;
  5185. end;
  5186. var
  5187. obj : ISDOField;
  5188. trueBuffer : array[0..( 3 * SizeOf(TSDODate))] of Byte;
  5189. buffer, tmpBuffer, attributeBuffer : PByte;
  5190. valBuffer : PSDODate;
  5191. begin
  5192. SetConstants();
  5193. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5194. buffer := @(trueBuffer[0]);
  5195. tmpBuffer := buffer;
  5196. attributeBuffer := buffer;
  5197. Inc(tmpBuffer);
  5198. valBuffer := PSDODate(tmpBuffer);
  5199. obj := Create_Field();
  5200. obj.setString(buffer,F_OFFSET_0,xsd_DateTimeToStr(VAL_1,xdkDateTime));
  5201. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5202. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5203. CheckEquals(VAL_1,valBuffer^,'',False);
  5204. obj.setString(buffer,F_OFFSET_0,xsd_DateTimeToStr(VAL_2,xdkDateTime));
  5205. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5206. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5207. CheckEquals(VAL_2,valBuffer^);
  5208. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  5209. Inc(tmpBuffer);
  5210. Inc(attributeBuffer);
  5211. valBuffer := PSDODate(tmpBuffer);
  5212. obj.setString(buffer,F_OFFSET_1,xsd_DateTimeToStr(VAL_1,xdkDateTime));
  5213. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5214. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5215. CheckEquals(VAL_1,valBuffer^,'',False);
  5216. obj.setString(buffer,F_OFFSET_1,xsd_DateTimeToStr(VAL_2,xdkDateTime));
  5217. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5218. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5219. CheckEquals(VAL_2,valBuffer^);
  5220. end;
  5221. {$IFDEF HAS_SDO_CHAR}
  5222. { TSDOCharField_Test }
  5223. function TSDOCharField_Test.Create_Field() : ISDOField;
  5224. begin
  5225. Result := TSDOCharField.Create() as ISDOField;
  5226. end;
  5227. procedure TSDOCharField_Test.getBoolean();
  5228. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5229. VAL_1 = TSDOChar('X'); VAL_2 = TSDOChar('Y'); VAL_3 = TSDOChar(#0);
  5230. var
  5231. obj : ISDOField;
  5232. intVal : QWord;
  5233. buffer, tmpBuffer, attributeBuffer : PByte;
  5234. valBuffer : PSDOChar;
  5235. begin
  5236. intVal := 0;
  5237. buffer := @intVal;
  5238. tmpBuffer := buffer;
  5239. attributeBuffer := buffer;
  5240. Inc(tmpBuffer);
  5241. valBuffer := PSDOChar(tmpBuffer);
  5242. obj := Create_Field();
  5243. valBuffer^ := VAL_1;
  5244. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5245. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5246. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  5247. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5248. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5249. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  5250. valBuffer^ := VAL_2;
  5251. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5252. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5253. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  5254. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5255. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5256. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  5257. valBuffer^ := VAL_3;
  5258. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5259. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5260. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  5261. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5262. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5263. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  5264. intVal := 0;
  5265. Inc(tmpBuffer);
  5266. Inc(attributeBuffer);
  5267. valBuffer := PSDOChar(tmpBuffer);
  5268. valBuffer^ := VAL_1;
  5269. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5270. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5271. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  5272. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5273. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5274. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  5275. valBuffer^ := VAL_2;
  5276. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5277. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5278. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  5279. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5280. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5281. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  5282. valBuffer^ := VAL_3;
  5283. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5284. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5285. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  5286. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5287. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5288. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  5289. end;
  5290. procedure TSDOCharField_Test.getByte();
  5291. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5292. VAL_1 = TSDOChar(#123); VAL_2 = TSDOChar(#45); VAL_3 = TSDOChar(#0);
  5293. var
  5294. obj : ISDOField;
  5295. intVal : QWord;
  5296. buffer, tmpBuffer, attributeBuffer : PByte;
  5297. valBuffer : PSDOChar;
  5298. begin
  5299. intVal := 0;
  5300. buffer := @intVal;
  5301. tmpBuffer := buffer;
  5302. attributeBuffer := buffer;
  5303. Inc(tmpBuffer);
  5304. valBuffer := PSDOChar(tmpBuffer);
  5305. obj := Create_Field();
  5306. valBuffer^ := VAL_1;
  5307. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5308. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5309. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5310. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5311. CheckEquals(Ord(VAL_1),obj.getByte(buffer,F_OFFSET_0));
  5312. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5313. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5314. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5315. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5316. CheckEquals(Ord(VAL_1),obj.getByte(buffer,F_OFFSET_0));
  5317. valBuffer^ := VAL_2;
  5318. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5319. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5320. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5321. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5322. CheckEquals(Ord(VAL_2),obj.getByte(buffer,F_OFFSET_0));
  5323. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5324. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5325. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5326. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5327. CheckEquals(Ord(VAL_2),obj.getByte(buffer,F_OFFSET_0));
  5328. valBuffer^ := VAL_3;
  5329. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5330. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5331. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5332. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5333. CheckEquals(Ord(VAL_3),obj.getByte(buffer,F_OFFSET_0));
  5334. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5335. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5336. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  5337. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5338. CheckEquals(Ord(VAL_3),obj.getByte(buffer,F_OFFSET_0));
  5339. intVal := 0;
  5340. Inc(tmpBuffer);
  5341. Inc(attributeBuffer);
  5342. valBuffer := PSDOChar(tmpBuffer);
  5343. valBuffer^ := VAL_1;
  5344. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5345. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5346. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5347. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5348. CheckEquals(Ord(VAL_1),obj.getByte(buffer,F_OFFSET_1));
  5349. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5350. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5351. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5352. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5353. CheckEquals(Ord(VAL_1),obj.getByte(buffer,F_OFFSET_1));
  5354. valBuffer^ := VAL_2;
  5355. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5356. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5357. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5358. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5359. CheckEquals(Ord(VAL_2),obj.getByte(buffer,F_OFFSET_1));
  5360. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5361. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5362. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5363. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5364. CheckEquals(Ord(VAL_2),obj.getByte(buffer,F_OFFSET_1));
  5365. valBuffer^ := VAL_3;
  5366. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5367. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5368. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5369. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5370. CheckEquals(Ord(VAL_3),obj.getByte(buffer,F_OFFSET_1));
  5371. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5372. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5373. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  5374. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5375. CheckEquals(Ord(VAL_3),obj.getByte(buffer,F_OFFSET_1));
  5376. end;
  5377. procedure TSDOCharField_Test.getCharacter();
  5378. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5379. VAL_1 = TSDOChar('a'); VAL_2 = TSDOChar('i'); VAL_3 = TSDOChar('1');
  5380. var
  5381. obj : ISDOField;
  5382. intVal : QWord;
  5383. buffer, tmpBuffer, attributeBuffer : PByte;
  5384. valBuffer : PSDOChar;
  5385. begin
  5386. intVal := 0;
  5387. buffer := @intVal;
  5388. tmpBuffer := buffer;
  5389. attributeBuffer := buffer;
  5390. Inc(tmpBuffer);
  5391. valBuffer := PSDOChar(tmpBuffer);
  5392. obj := Create_Field();
  5393. valBuffer^ := VAL_1;
  5394. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5395. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5396. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5397. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5398. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_0));
  5399. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5400. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5401. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5402. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5403. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_0));
  5404. valBuffer^ := VAL_2;
  5405. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5406. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5407. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5408. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5409. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_0));
  5410. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5411. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5412. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5413. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5414. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_0));
  5415. valBuffer^ := VAL_3;
  5416. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5417. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5418. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5419. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5420. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_0));
  5421. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5422. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5423. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_0));
  5424. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5425. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_0));
  5426. intVal := 0;
  5427. Inc(tmpBuffer);
  5428. Inc(attributeBuffer);
  5429. valBuffer := PSDOChar(tmpBuffer);
  5430. valBuffer^ := VAL_1;
  5431. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5432. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5433. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5434. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5435. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_1));
  5436. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5437. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5438. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5439. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5440. CheckEquals(VAL_1,obj.getCharacter(buffer,F_OFFSET_1));
  5441. valBuffer^ := VAL_2;
  5442. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5443. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5444. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5445. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5446. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_1));
  5447. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5448. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5449. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5450. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5451. CheckEquals(VAL_2,obj.getCharacter(buffer,F_OFFSET_1));
  5452. valBuffer^ := VAL_3;
  5453. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5454. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5455. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5456. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5457. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_1));
  5458. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5459. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5460. CheckEquals(#0,obj.getCharacter(buffer,F_OFFSET_1));
  5461. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5462. CheckEquals(VAL_3,obj.getCharacter(buffer,F_OFFSET_1));
  5463. end;
  5464. procedure TSDOCharField_Test.getInteger();
  5465. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5466. VAL_1 = TSDOChar(#97); VAL_2 = TSDOChar(#48); VAL_3 = TSDOChar(#100);
  5467. var
  5468. obj : ISDOField;
  5469. intVal : QWord;
  5470. buffer, tmpBuffer, attributeBuffer : PByte;
  5471. valBuffer : PSDOChar;
  5472. begin
  5473. intVal := 0;
  5474. buffer := @intVal;
  5475. tmpBuffer := buffer;
  5476. attributeBuffer := buffer;
  5477. Inc(tmpBuffer);
  5478. valBuffer := PSDOChar(tmpBuffer);
  5479. obj := Create_Field();
  5480. valBuffer^ := VAL_1;
  5481. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5482. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5483. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5484. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5485. CheckEquals(Ord(VAL_1),obj.getInteger(buffer,F_OFFSET_0));
  5486. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5487. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5488. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5489. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5490. CheckEquals(Ord(Ord(VAL_1)),obj.getInteger(buffer,F_OFFSET_0));
  5491. valBuffer^ := VAL_2;
  5492. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5493. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5494. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5495. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5496. CheckEquals(Ord(VAL_2),obj.getInteger(buffer,F_OFFSET_0));
  5497. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5498. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5499. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5500. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5501. CheckEquals(Ord(VAL_2),obj.getInteger(buffer,F_OFFSET_0));
  5502. valBuffer^ := VAL_3;
  5503. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5504. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5505. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5506. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5507. CheckEquals(Ord(VAL_3),obj.getInteger(buffer,F_OFFSET_0));
  5508. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5509. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5510. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  5511. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5512. CheckEquals(Ord(VAL_3),obj.getInteger(buffer,F_OFFSET_0));
  5513. intVal := 0;
  5514. Inc(tmpBuffer);
  5515. Inc(attributeBuffer);
  5516. valBuffer := PSDOChar(tmpBuffer);
  5517. valBuffer^ := VAL_1;
  5518. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5519. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5520. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5521. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5522. CheckEquals(Ord(VAL_1),obj.getInteger(buffer,F_OFFSET_1));
  5523. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5524. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5525. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5526. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5527. CheckEquals(Ord(VAL_1),obj.getInteger(buffer,F_OFFSET_1));
  5528. valBuffer^ := VAL_2;
  5529. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5530. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5531. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5532. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5533. CheckEquals(Ord(VAL_2),obj.getInteger(buffer,F_OFFSET_1));
  5534. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5535. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5536. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5537. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5538. CheckEquals(Ord(VAL_2),obj.getInteger(buffer,F_OFFSET_1));
  5539. valBuffer^ := VAL_3;
  5540. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5541. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5542. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5543. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5544. CheckEquals(Ord(VAL_3),obj.getInteger(buffer,F_OFFSET_1));
  5545. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5546. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5547. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  5548. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5549. CheckEquals(Ord(VAL_3),obj.getInteger(buffer,F_OFFSET_1));
  5550. end;
  5551. procedure TSDOCharField_Test.getLong();
  5552. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5553. VAL_1 = TSDOChar(#97); VAL_2 = TSDOChar(#48); VAL_3 = TSDOChar(#100);
  5554. var
  5555. obj : ISDOField;
  5556. intVal : QWord;
  5557. buffer, tmpBuffer, attributeBuffer : PByte;
  5558. valBuffer : PSDOChar;
  5559. begin
  5560. intVal := 0;
  5561. buffer := @intVal;
  5562. tmpBuffer := buffer;
  5563. attributeBuffer := buffer;
  5564. Inc(tmpBuffer);
  5565. valBuffer := PSDOChar(tmpBuffer);
  5566. obj := Create_Field();
  5567. valBuffer^ := VAL_1;
  5568. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5569. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5570. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5571. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5572. CheckEquals(Ord(VAL_1),obj.getLong(buffer,F_OFFSET_0));
  5573. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5574. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5575. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5576. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5577. CheckEquals(Ord(Ord(VAL_1)),obj.getLong(buffer,F_OFFSET_0));
  5578. valBuffer^ := VAL_2;
  5579. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5580. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5581. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5582. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5583. CheckEquals(Ord(VAL_2),obj.getLong(buffer,F_OFFSET_0));
  5584. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5585. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5586. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5587. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5588. CheckEquals(Ord(VAL_2),obj.getLong(buffer,F_OFFSET_0));
  5589. valBuffer^ := VAL_3;
  5590. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5591. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5592. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5593. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5594. CheckEquals(Ord(VAL_3),obj.getLong(buffer,F_OFFSET_0));
  5595. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5596. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5597. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  5598. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5599. CheckEquals(Ord(VAL_3),obj.getLong(buffer,F_OFFSET_0));
  5600. intVal := 0;
  5601. Inc(tmpBuffer);
  5602. Inc(attributeBuffer);
  5603. valBuffer := PSDOChar(tmpBuffer);
  5604. valBuffer^ := VAL_1;
  5605. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5606. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5607. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5608. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5609. CheckEquals(Ord(VAL_1),obj.getLong(buffer,F_OFFSET_1));
  5610. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5611. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5612. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5613. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5614. CheckEquals(Ord(VAL_1),obj.getLong(buffer,F_OFFSET_1));
  5615. valBuffer^ := VAL_2;
  5616. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5617. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5618. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5619. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5620. CheckEquals(Ord(VAL_2),obj.getLong(buffer,F_OFFSET_1));
  5621. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5622. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5623. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5624. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5625. CheckEquals(Ord(VAL_2),obj.getLong(buffer,F_OFFSET_1));
  5626. valBuffer^ := VAL_3;
  5627. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5628. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5629. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5630. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5631. CheckEquals(Ord(VAL_3),obj.getLong(buffer,F_OFFSET_1));
  5632. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5633. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5634. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  5635. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5636. CheckEquals(Ord(VAL_3),obj.getLong(buffer,F_OFFSET_1));
  5637. end;
  5638. procedure TSDOCharField_Test.getShort();
  5639. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5640. VAL_1 = TSDOChar(#97); VAL_2 = TSDOChar(#48); VAL_3 = TSDOChar(#100);
  5641. var
  5642. obj : ISDOField;
  5643. intVal : QWord;
  5644. buffer, tmpBuffer, attributeBuffer : PByte;
  5645. valBuffer : PSDOChar;
  5646. begin
  5647. intVal := 0;
  5648. buffer := @intVal;
  5649. tmpBuffer := buffer;
  5650. attributeBuffer := buffer;
  5651. Inc(tmpBuffer);
  5652. valBuffer := PSDOChar(tmpBuffer);
  5653. obj := Create_Field();
  5654. valBuffer^ := VAL_1;
  5655. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5656. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5657. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  5658. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5659. CheckEquals(Ord(VAL_1),obj.getShort(buffer,F_OFFSET_0));
  5660. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5661. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5662. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  5663. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5664. CheckEquals(Ord(Ord(VAL_1)),obj.getShort(buffer,F_OFFSET_0));
  5665. valBuffer^ := VAL_2;
  5666. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5667. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5668. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  5669. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5670. CheckEquals(Ord(VAL_2),obj.getShort(buffer,F_OFFSET_0));
  5671. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5672. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5673. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  5674. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5675. CheckEquals(Ord(VAL_2),obj.getShort(buffer,F_OFFSET_0));
  5676. valBuffer^ := VAL_3;
  5677. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5678. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5679. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  5680. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5681. CheckEquals(Ord(VAL_3),obj.getShort(buffer,F_OFFSET_0));
  5682. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5683. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5684. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  5685. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5686. CheckEquals(Ord(VAL_3),obj.getShort(buffer,F_OFFSET_0));
  5687. intVal := 0;
  5688. Inc(tmpBuffer);
  5689. Inc(attributeBuffer);
  5690. valBuffer := PSDOChar(tmpBuffer);
  5691. valBuffer^ := VAL_1;
  5692. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5693. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5694. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  5695. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5696. CheckEquals(Ord(VAL_1),obj.getShort(buffer,F_OFFSET_1));
  5697. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5698. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5699. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  5700. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5701. CheckEquals(Ord(VAL_1),obj.getShort(buffer,F_OFFSET_1));
  5702. valBuffer^ := VAL_2;
  5703. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5704. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5705. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  5706. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5707. CheckEquals(Ord(VAL_2),obj.getShort(buffer,F_OFFSET_1));
  5708. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5709. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5710. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  5711. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5712. CheckEquals(Ord(VAL_2),obj.getShort(buffer,F_OFFSET_1));
  5713. valBuffer^ := VAL_3;
  5714. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5715. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5716. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  5717. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5718. CheckEquals(Ord(VAL_3),obj.getShort(buffer,F_OFFSET_1));
  5719. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5720. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  5721. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  5722. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5723. CheckEquals(Ord(VAL_3),obj.getShort(buffer,F_OFFSET_1));
  5724. end;
  5725. procedure TSDOCharField_Test.getString();
  5726. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5727. VAL_1 = TSDOChar('a'); VAL_2 = TSDOChar('b'); VAL_3 = TSDOChar('c');
  5728. var
  5729. obj : ISDOField;
  5730. intVal : QWord;
  5731. buffer, tmpBuffer, attributeBuffer : PByte;
  5732. valBuffer : PSDOChar;
  5733. begin
  5734. intVal := 0;
  5735. buffer := @intVal;
  5736. tmpBuffer := buffer;
  5737. attributeBuffer := buffer;
  5738. Inc(tmpBuffer);
  5739. valBuffer := PSDOChar(tmpBuffer);
  5740. obj := Create_Field();
  5741. valBuffer^ := VAL_1;
  5742. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5743. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5744. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  5745. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5746. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5747. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_0));
  5748. valBuffer^ := VAL_2;
  5749. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5750. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5751. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  5752. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5753. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5754. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_0));
  5755. valBuffer^ := VAL_3;
  5756. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5757. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5758. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  5759. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5760. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5761. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_0));
  5762. intVal := 0;
  5763. Inc(tmpBuffer);
  5764. Inc(attributeBuffer);
  5765. valBuffer := PSDOChar(tmpBuffer);
  5766. valBuffer^ := VAL_1;
  5767. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5768. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5769. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  5770. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5771. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5772. CheckEquals(VAL_1,obj.getString(buffer,F_OFFSET_1));
  5773. valBuffer^ := VAL_2;
  5774. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5775. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5776. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  5777. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5778. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5779. CheckEquals(VAL_2,obj.getString(buffer,F_OFFSET_1));
  5780. valBuffer^ := VAL_3;
  5781. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  5782. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5783. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  5784. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  5785. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  5786. CheckEquals(VAL_3,obj.getString(buffer,F_OFFSET_1));
  5787. end;
  5788. procedure TSDOCharField_Test.setBoolean();
  5789. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5790. var
  5791. obj : ISDOField;
  5792. intVal : QWord;
  5793. buffer, tmpBuffer, attributeBuffer : PByte;
  5794. valBuffer : PSDOChar;
  5795. begin
  5796. intVal := 0;
  5797. buffer := @intVal;
  5798. tmpBuffer := buffer;
  5799. attributeBuffer := buffer;
  5800. Inc(tmpBuffer);
  5801. valBuffer := PSDOChar(tmpBuffer);
  5802. obj := Create_Field();
  5803. obj.setBoolean(buffer,F_OFFSET_0,True);
  5804. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5805. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5806. CheckEquals('1',valBuffer^);
  5807. obj.setBoolean(buffer,F_OFFSET_0,False);
  5808. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5809. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5810. CheckEquals('0',valBuffer^);
  5811. intVal := 0;
  5812. Inc(tmpBuffer);
  5813. Inc(attributeBuffer);
  5814. valBuffer := PSDOChar(tmpBuffer);
  5815. obj.setBoolean(buffer,F_OFFSET_1,True);
  5816. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5817. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5818. CheckEquals('1',valBuffer^);
  5819. obj.setBoolean(buffer,F_OFFSET_1,False);
  5820. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5821. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5822. CheckEquals('0',valBuffer^);
  5823. end;
  5824. procedure TSDOCharField_Test.setByte();
  5825. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5826. VAL_1 = TSDOChar(#98); VAL_2 = TSDOChar(#56); VAL_3 = TSDOChar(#110);
  5827. var
  5828. obj : ISDOField;
  5829. intVal : QWord;
  5830. buffer, tmpBuffer, attributeBuffer : PByte;
  5831. valBuffer : PSDOChar;
  5832. begin
  5833. intVal := 0;
  5834. buffer := @intVal;
  5835. tmpBuffer := buffer;
  5836. attributeBuffer := buffer;
  5837. Inc(tmpBuffer);
  5838. valBuffer := PSDOChar(tmpBuffer);
  5839. obj := Create_Field();
  5840. obj.setByte(buffer,F_OFFSET_0,Ord(VAL_1));
  5841. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5842. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5843. CheckEquals(VAL_1,valBuffer^);
  5844. obj.setByte(buffer,F_OFFSET_0,Ord(VAL_2));
  5845. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5846. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5847. CheckEquals(VAL_2,valBuffer^);
  5848. obj.setByte(buffer,F_OFFSET_0,Ord(VAL_3));
  5849. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5850. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5851. CheckEquals(VAL_3,valBuffer^);
  5852. intVal := 0;
  5853. Inc(tmpBuffer);
  5854. Inc(attributeBuffer);
  5855. valBuffer := PSDOChar(tmpBuffer);
  5856. obj.setByte(buffer,F_OFFSET_1,Ord(VAL_1));
  5857. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5858. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5859. CheckEquals(VAL_1,valBuffer^);
  5860. obj.setByte(buffer,F_OFFSET_1,Ord(VAL_2));
  5861. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5862. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5863. CheckEquals(VAL_2,valBuffer^);
  5864. obj.setByte(buffer,F_OFFSET_1,Ord(VAL_3));
  5865. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5866. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5867. CheckEquals(VAL_3,valBuffer^);
  5868. end;
  5869. procedure TSDOCharField_Test.setCharacter();
  5870. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5871. VAL_1 = TSDOChar('A'); VAL_2 = TSDOChar('b'); VAL_3 = TSDOChar('1');
  5872. var
  5873. obj : ISDOField;
  5874. intVal : QWord;
  5875. buffer, tmpBuffer, attributeBuffer : PByte;
  5876. valBuffer : PSDOChar;
  5877. begin
  5878. intVal := 0;
  5879. buffer := @intVal;
  5880. tmpBuffer := buffer;
  5881. attributeBuffer := buffer;
  5882. Inc(tmpBuffer);
  5883. valBuffer := PSDOChar(tmpBuffer);
  5884. obj := Create_Field();
  5885. obj.setCharacter(buffer,F_OFFSET_0,VAL_1);
  5886. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5887. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5888. CheckEquals(VAL_1,valBuffer^);
  5889. obj.setCharacter(buffer,F_OFFSET_0,VAL_2);
  5890. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5891. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5892. CheckEquals(VAL_2,valBuffer^);
  5893. obj.setCharacter(buffer,F_OFFSET_0,VAL_3);
  5894. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5895. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5896. CheckEquals(VAL_3,valBuffer^);
  5897. intVal := 0;
  5898. Inc(tmpBuffer);
  5899. Inc(attributeBuffer);
  5900. valBuffer := PSDOChar(tmpBuffer);
  5901. obj.setCharacter(buffer,F_OFFSET_1,VAL_1);
  5902. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5903. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5904. CheckEquals(VAL_1,valBuffer^);
  5905. obj.setCharacter(buffer,F_OFFSET_1,VAL_2);
  5906. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5907. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5908. CheckEquals(VAL_2,valBuffer^);
  5909. obj.setCharacter(buffer,F_OFFSET_1,VAL_3);
  5910. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5911. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5912. CheckEquals(VAL_3,valBuffer^);
  5913. end;
  5914. procedure TSDOCharField_Test.setInteger();
  5915. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5916. VAL_1 = TSDOChar(#98); VAL_2 = TSDOChar(#56); VAL_3 = TSDOChar(#110);
  5917. var
  5918. obj : ISDOField;
  5919. intVal : QWord;
  5920. buffer, tmpBuffer, attributeBuffer : PByte;
  5921. valBuffer : PSDOChar;
  5922. begin
  5923. intVal := 0;
  5924. buffer := @intVal;
  5925. tmpBuffer := buffer;
  5926. attributeBuffer := buffer;
  5927. Inc(tmpBuffer);
  5928. valBuffer := PSDOChar(tmpBuffer);
  5929. obj := Create_Field();
  5930. obj.setInteger(buffer,F_OFFSET_0,Ord(VAL_1));
  5931. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5932. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5933. CheckEquals(VAL_1,valBuffer^);
  5934. obj.setInteger(buffer,F_OFFSET_0,Ord(VAL_2));
  5935. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5936. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5937. CheckEquals(VAL_2,valBuffer^);
  5938. obj.setInteger(buffer,F_OFFSET_0,Ord(VAL_3));
  5939. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5940. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5941. CheckEquals(VAL_3,valBuffer^);
  5942. intVal := 0;
  5943. Inc(tmpBuffer);
  5944. Inc(attributeBuffer);
  5945. valBuffer := PSDOChar(tmpBuffer);
  5946. obj.setInteger(buffer,F_OFFSET_1,Ord(VAL_1));
  5947. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5948. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5949. CheckEquals(VAL_1,valBuffer^);
  5950. obj.setInteger(buffer,F_OFFSET_1,Ord(VAL_2));
  5951. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5952. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5953. CheckEquals(VAL_2,valBuffer^);
  5954. obj.setInteger(buffer,F_OFFSET_1,Ord(VAL_3));
  5955. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5956. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5957. CheckEquals(VAL_3,valBuffer^);
  5958. end;
  5959. procedure TSDOCharField_Test.setLong();
  5960. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  5961. VAL_1 = TSDOChar(#98); VAL_2 = TSDOChar(#56); VAL_3 = TSDOChar(#110);
  5962. var
  5963. obj : ISDOField;
  5964. intVal : QWord;
  5965. buffer, tmpBuffer, attributeBuffer : PByte;
  5966. valBuffer : PSDOChar;
  5967. begin
  5968. intVal := 0;
  5969. buffer := @intVal;
  5970. tmpBuffer := buffer;
  5971. attributeBuffer := buffer;
  5972. Inc(tmpBuffer);
  5973. valBuffer := PSDOChar(tmpBuffer);
  5974. obj := Create_Field();
  5975. obj.setLong(buffer,F_OFFSET_0,Ord(VAL_1));
  5976. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5977. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5978. CheckEquals(VAL_1,valBuffer^);
  5979. obj.setLong(buffer,F_OFFSET_0,Ord(VAL_2));
  5980. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5981. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5982. CheckEquals(VAL_2,valBuffer^);
  5983. obj.setLong(buffer,F_OFFSET_0,Ord(VAL_3));
  5984. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5985. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5986. CheckEquals(VAL_3,valBuffer^);
  5987. intVal := 0;
  5988. Inc(tmpBuffer);
  5989. Inc(attributeBuffer);
  5990. valBuffer := PSDOChar(tmpBuffer);
  5991. obj.setLong(buffer,F_OFFSET_1,Ord(VAL_1));
  5992. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5993. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5994. CheckEquals(VAL_1,valBuffer^);
  5995. obj.setLong(buffer,F_OFFSET_1,Ord(VAL_2));
  5996. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  5997. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  5998. CheckEquals(VAL_2,valBuffer^);
  5999. obj.setLong(buffer,F_OFFSET_1,Ord(VAL_3));
  6000. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6001. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6002. CheckEquals(VAL_3,valBuffer^);
  6003. end;
  6004. procedure TSDOCharField_Test.setShort();
  6005. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6006. VAL_1 = TSDOChar(#98); VAL_2 = TSDOChar(#56); VAL_3 = TSDOChar(#110);
  6007. var
  6008. obj : ISDOField;
  6009. intVal : QWord;
  6010. buffer, tmpBuffer, attributeBuffer : PByte;
  6011. valBuffer : PSDOChar;
  6012. begin
  6013. intVal := 0;
  6014. buffer := @intVal;
  6015. tmpBuffer := buffer;
  6016. attributeBuffer := buffer;
  6017. Inc(tmpBuffer);
  6018. valBuffer := PSDOChar(tmpBuffer);
  6019. obj := Create_Field();
  6020. obj.setShort(buffer,F_OFFSET_0,Ord(VAL_1));
  6021. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6022. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6023. CheckEquals(VAL_1,valBuffer^);
  6024. obj.setShort(buffer,F_OFFSET_0,Ord(VAL_2));
  6025. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6026. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6027. CheckEquals(VAL_2,valBuffer^);
  6028. obj.setShort(buffer,F_OFFSET_0,Ord(VAL_3));
  6029. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6030. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6031. CheckEquals(VAL_3,valBuffer^);
  6032. intVal := 0;
  6033. Inc(tmpBuffer);
  6034. Inc(attributeBuffer);
  6035. valBuffer := PSDOChar(tmpBuffer);
  6036. obj.setShort(buffer,F_OFFSET_1,Ord(VAL_1));
  6037. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6038. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6039. CheckEquals(VAL_1,valBuffer^);
  6040. obj.setShort(buffer,F_OFFSET_1,Ord(VAL_2));
  6041. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6042. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6043. CheckEquals(VAL_2,valBuffer^);
  6044. obj.setShort(buffer,F_OFFSET_1,Ord(VAL_3));
  6045. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6046. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6047. CheckEquals(VAL_3,valBuffer^);
  6048. end;
  6049. procedure TSDOCharField_Test.setString();
  6050. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6051. VAL_1 = TSDOChar('a'); VAL_2 = TSDOChar('b'); VAL_3 = TSDOChar('c');
  6052. var
  6053. obj : ISDOField;
  6054. intVal : QWord;
  6055. buffer, tmpBuffer, attributeBuffer : PByte;
  6056. valBuffer : PSDOChar;
  6057. begin
  6058. intVal := 0;
  6059. buffer := @intVal;
  6060. tmpBuffer := buffer;
  6061. attributeBuffer := buffer;
  6062. Inc(tmpBuffer);
  6063. valBuffer := PSDOChar(tmpBuffer);
  6064. obj := Create_Field();
  6065. obj.setString(buffer,F_OFFSET_0,VAL_1);
  6066. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6067. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6068. CheckEquals(VAL_1,valBuffer^);
  6069. obj.setString(buffer,F_OFFSET_0,VAL_2);
  6070. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6071. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6072. CheckEquals(VAL_2,valBuffer^);
  6073. intVal := 0;
  6074. Inc(tmpBuffer);
  6075. Inc(attributeBuffer);
  6076. valBuffer := PSDOChar(tmpBuffer);
  6077. obj.setString(buffer,F_OFFSET_1,VAL_1);
  6078. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6079. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6080. CheckEquals(VAL_1,valBuffer^);
  6081. obj.setString(buffer,F_OFFSET_1,VAL_2);
  6082. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6083. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6084. CheckEquals(VAL_2,valBuffer^);
  6085. end;
  6086. {$ENDIF HAS_SDO_CHAR}
  6087. {$IFDEF HAS_SDO_LONG}
  6088. { TSDOLongField_Test }
  6089. function TSDOLongField_Test.Create_Field() : ISDOField;
  6090. begin
  6091. Result := TSDOLongField.Create() as ISDOField;
  6092. end;
  6093. procedure TSDOLongField_Test.getBoolean();
  6094. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6095. VAL_1 = 12345678912345; VAL_2 = -12345678912345; VAL_3 = 0;
  6096. var
  6097. obj : ISDOField;
  6098. intVal : array[0..100] of Byte;
  6099. buffer, tmpBuffer, attributeBuffer : PByte;
  6100. valBuffer : PSDOLong;
  6101. begin
  6102. FillChar(intVal,SizeOf(intVal),#0);
  6103. buffer := @intVal;
  6104. tmpBuffer := buffer;
  6105. attributeBuffer := buffer;
  6106. Inc(tmpBuffer);
  6107. valBuffer := PSDOLong(tmpBuffer);
  6108. obj := Create_Field();
  6109. valBuffer^ := VAL_1;
  6110. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6111. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6112. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6113. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6114. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6115. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6116. valBuffer^ := VAL_2;
  6117. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6118. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6119. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6120. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6121. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6122. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6123. valBuffer^ := VAL_3;
  6124. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6125. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6126. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  6127. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6128. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6129. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  6130. FillChar(intVal,SizeOf(intVal),#0);
  6131. Inc(tmpBuffer);
  6132. Inc(attributeBuffer);
  6133. valBuffer := PSDOLong(tmpBuffer);
  6134. valBuffer^ := VAL_1;
  6135. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6136. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6137. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6138. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6139. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6140. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6141. valBuffer^ := VAL_2;
  6142. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6143. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6144. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6145. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6146. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6147. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6148. valBuffer^ := VAL_3;
  6149. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6150. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6151. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  6152. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6153. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6154. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  6155. end;
  6156. procedure TSDOLongField_Test.getByte();
  6157. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6158. VAL_1 = 12; VAL_2 = 123; VAL_3 = 0;
  6159. var
  6160. obj : ISDOField;
  6161. intVal : array[0..100] of Byte;
  6162. buffer, tmpBuffer, attributeBuffer : PByte;
  6163. valBuffer : PSDOLong;
  6164. begin
  6165. FillChar(intVal,SizeOf(intVal),#0);
  6166. buffer := @intVal;
  6167. tmpBuffer := buffer;
  6168. attributeBuffer := buffer;
  6169. Inc(tmpBuffer);
  6170. valBuffer := PSDOLong(tmpBuffer);
  6171. obj := Create_Field();
  6172. valBuffer^ := VAL_1;
  6173. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6174. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6175. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6176. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6177. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  6178. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6179. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6180. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6181. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6182. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  6183. valBuffer^ := VAL_2;
  6184. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6185. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6186. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6187. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6188. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  6189. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6190. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6191. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6192. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6193. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  6194. valBuffer^ := VAL_3;
  6195. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6196. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6197. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6198. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6199. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  6200. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6201. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6202. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  6203. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6204. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  6205. FillChar(intVal,SizeOf(intVal),#0);
  6206. Inc(tmpBuffer);
  6207. Inc(attributeBuffer);
  6208. valBuffer := PSDOLong(tmpBuffer);
  6209. valBuffer^ := VAL_1;
  6210. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6211. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6212. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6213. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6214. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  6215. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6216. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6217. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6218. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6219. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  6220. valBuffer^ := VAL_2;
  6221. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6222. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6223. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6224. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6225. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  6226. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6227. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6228. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6229. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6230. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  6231. valBuffer^ := VAL_3;
  6232. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6233. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6234. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6235. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6236. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  6237. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6238. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6239. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  6240. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6241. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  6242. end;
  6243. procedure TSDOLongField_Test.getCharacter();
  6244. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6245. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  6246. var
  6247. obj : ISDOField;
  6248. intVal : array[0..100] of Byte;
  6249. buffer, tmpBuffer, attributeBuffer : PByte;
  6250. valBuffer : PSDOLong;
  6251. begin
  6252. FillChar(intVal,SizeOf(intVal),#0);
  6253. buffer := @intVal;
  6254. tmpBuffer := buffer;
  6255. attributeBuffer := buffer;
  6256. Inc(tmpBuffer);
  6257. valBuffer := PSDOLong(tmpBuffer);
  6258. obj := Create_Field();
  6259. valBuffer^ := VAL_1;
  6260. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6261. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6262. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  6263. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6264. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6265. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  6266. valBuffer^ := VAL_2;
  6267. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6268. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6269. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  6270. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6271. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6272. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  6273. valBuffer^ := VAL_3;
  6274. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6275. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6276. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  6277. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6278. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6279. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  6280. FillChar(intVal,SizeOf(intVal),#0);
  6281. Inc(tmpBuffer);
  6282. Inc(attributeBuffer);
  6283. valBuffer := PSDOLong(tmpBuffer);
  6284. valBuffer^ := VAL_1;
  6285. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6286. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6287. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  6288. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6289. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6290. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  6291. valBuffer^ := VAL_2;
  6292. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6293. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6294. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  6295. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6296. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6297. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  6298. valBuffer^ := VAL_3;
  6299. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6300. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6301. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  6302. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6303. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6304. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  6305. end;
  6306. procedure TSDOLongField_Test.getInteger();
  6307. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6308. VAL_1 = 12345678; VAL_2 = -78945612; VAL_3 = 0;
  6309. var
  6310. obj : ISDOField;
  6311. intVal : array[0..100] of Byte;
  6312. buffer, tmpBuffer, attributeBuffer : PByte;
  6313. valBuffer : PSDOLong;
  6314. begin
  6315. FillChar(intVal,SizeOf(intVal),#0);
  6316. buffer := @intVal;
  6317. tmpBuffer := buffer;
  6318. attributeBuffer := buffer;
  6319. Inc(tmpBuffer);
  6320. valBuffer := PSDOLong(tmpBuffer);
  6321. obj := Create_Field();
  6322. valBuffer^ := VAL_1;
  6323. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6324. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6325. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6326. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6327. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  6328. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6329. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6330. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6331. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6332. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  6333. valBuffer^ := VAL_2;
  6334. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6335. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6336. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6337. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6338. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  6339. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6340. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6341. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6342. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6343. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  6344. valBuffer^ := VAL_3;
  6345. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6346. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6347. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6348. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6349. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  6350. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6351. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6352. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  6353. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6354. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  6355. FillChar(intVal,SizeOf(intVal),#0);
  6356. Inc(tmpBuffer);
  6357. Inc(attributeBuffer);
  6358. valBuffer := PSDOLong(tmpBuffer);
  6359. valBuffer^ := VAL_1;
  6360. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6361. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6362. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6363. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6364. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  6365. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6366. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6367. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6368. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6369. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  6370. valBuffer^ := VAL_2;
  6371. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6372. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6373. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6374. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6375. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  6376. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6377. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6378. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6379. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6380. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  6381. valBuffer^ := VAL_3;
  6382. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6383. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6384. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6385. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6386. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  6387. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6388. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6389. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  6390. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6391. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  6392. end;
  6393. procedure TSDOLongField_Test.getLong();
  6394. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6395. VAL_1 = 1234586791234567; VAL_2 = -98765532166547; VAL_3 = 0;
  6396. var
  6397. obj : ISDOField;
  6398. intVal : array[0..100] of Byte;
  6399. buffer, tmpBuffer, attributeBuffer : PByte;
  6400. valBuffer : PSDOLong;
  6401. begin
  6402. FillChar(intVal,SizeOf(intVal),#0);
  6403. buffer := @intVal;
  6404. tmpBuffer := buffer;
  6405. attributeBuffer := buffer;
  6406. Inc(tmpBuffer);
  6407. valBuffer := PSDOLong(tmpBuffer);
  6408. obj := Create_Field();
  6409. valBuffer^ := VAL_1;
  6410. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6411. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6412. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6413. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6414. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  6415. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6416. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6417. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6418. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6419. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  6420. valBuffer^ := VAL_2;
  6421. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6422. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6423. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6424. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6425. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  6426. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6427. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6428. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6429. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6430. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  6431. valBuffer^ := VAL_3;
  6432. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6433. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6434. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6435. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6436. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  6437. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6438. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6439. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  6440. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6441. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  6442. FillChar(intVal,SizeOf(intVal),#0);
  6443. Inc(tmpBuffer);
  6444. Inc(attributeBuffer);
  6445. valBuffer := PSDOLong(tmpBuffer);
  6446. valBuffer^ := VAL_1;
  6447. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6448. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6449. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6450. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6451. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  6452. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6453. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6454. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6455. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6456. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  6457. valBuffer^ := VAL_2;
  6458. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6459. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6460. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6461. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6462. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  6463. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6464. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6465. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6466. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6467. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  6468. valBuffer^ := VAL_3;
  6469. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6470. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6471. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6472. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6473. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  6474. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6475. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6476. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  6477. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6478. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  6479. end;
  6480. procedure TSDOLongField_Test.getShort();
  6481. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6482. VAL_1 = 1234; VAL_2 = -987; VAL_3 = 0;
  6483. var
  6484. obj : ISDOField;
  6485. intVal : array[0..100] of Byte;
  6486. buffer, tmpBuffer, attributeBuffer : PByte;
  6487. valBuffer : PSDOLong;
  6488. begin
  6489. FillChar(intVal,SizeOf(intVal),#0);
  6490. buffer := @intVal;
  6491. tmpBuffer := buffer;
  6492. attributeBuffer := buffer;
  6493. Inc(tmpBuffer);
  6494. valBuffer := PSDOLong(tmpBuffer);
  6495. obj := Create_Field();
  6496. valBuffer^ := VAL_1;
  6497. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6498. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6499. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6500. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6501. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  6502. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6503. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6504. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6505. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6506. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  6507. valBuffer^ := VAL_2;
  6508. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6509. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6510. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6511. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6512. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  6513. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6514. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6515. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6516. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6517. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  6518. valBuffer^ := VAL_3;
  6519. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6520. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6521. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6522. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6523. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  6524. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6525. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6526. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  6527. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6528. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  6529. FillChar(intVal,SizeOf(intVal),#0);
  6530. Inc(tmpBuffer);
  6531. Inc(attributeBuffer);
  6532. valBuffer := PSDOLong(tmpBuffer);
  6533. valBuffer^ := VAL_1;
  6534. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6535. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6536. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6537. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6538. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  6539. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6540. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6541. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6542. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6543. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  6544. valBuffer^ := VAL_2;
  6545. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6546. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6547. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6548. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6549. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  6550. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6551. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6552. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6553. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6554. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  6555. valBuffer^ := VAL_3;
  6556. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6557. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6558. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6559. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6560. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  6561. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6562. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  6563. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  6564. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6565. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  6566. end;
  6567. procedure TSDOLongField_Test.getString();
  6568. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6569. VAL_1 = 123456789123456; VAL_2 = -9876543211234; VAL_3 = 0;
  6570. var
  6571. obj : ISDOField;
  6572. intVal : array[0..100] of Byte;
  6573. buffer, tmpBuffer, attributeBuffer : PByte;
  6574. valBuffer : PSDOLong;
  6575. begin
  6576. FillChar(intVal,SizeOf(intVal),#0);
  6577. buffer := @intVal;
  6578. tmpBuffer := buffer;
  6579. attributeBuffer := buffer;
  6580. Inc(tmpBuffer);
  6581. valBuffer := PSDOLong(tmpBuffer);
  6582. obj := Create_Field();
  6583. valBuffer^ := VAL_1;
  6584. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6585. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6586. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  6587. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6588. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6589. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  6590. valBuffer^ := VAL_2;
  6591. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6592. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6593. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  6594. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6595. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6596. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  6597. valBuffer^ := VAL_3;
  6598. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6599. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6600. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  6601. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6602. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6603. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  6604. FillChar(intVal,SizeOf(intVal),#0);
  6605. Inc(tmpBuffer);
  6606. Inc(attributeBuffer);
  6607. valBuffer := PSDOLong(tmpBuffer);
  6608. valBuffer^ := VAL_1;
  6609. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6610. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6611. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  6612. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6613. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6614. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  6615. valBuffer^ := VAL_2;
  6616. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6617. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6618. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  6619. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6620. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6621. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  6622. valBuffer^ := VAL_3;
  6623. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6624. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6625. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  6626. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6627. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6628. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  6629. end;
  6630. procedure TSDOLongField_Test.setBoolean();
  6631. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6632. var
  6633. obj : ISDOField;
  6634. intVal : array[0..100] of Byte;
  6635. buffer, tmpBuffer, attributeBuffer : PByte;
  6636. valBuffer : PSDOLong;
  6637. begin
  6638. FillChar(intVal,SizeOf(intVal),#0);
  6639. buffer := @intVal;
  6640. tmpBuffer := buffer;
  6641. attributeBuffer := buffer;
  6642. Inc(tmpBuffer);
  6643. valBuffer := PSDOLong(tmpBuffer);
  6644. obj := Create_Field();
  6645. obj.setBoolean(buffer,F_OFFSET_0,True);
  6646. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6647. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6648. CheckEquals(1,valBuffer^);
  6649. obj.setBoolean(buffer,F_OFFSET_0,False);
  6650. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6651. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6652. CheckEquals(0,valBuffer^);
  6653. FillChar(intVal,SizeOf(intVal),#0);
  6654. Inc(tmpBuffer);
  6655. Inc(attributeBuffer);
  6656. valBuffer := PSDOLong(tmpBuffer);
  6657. obj.setBoolean(buffer,F_OFFSET_1,True);
  6658. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6659. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6660. CheckEquals(1,valBuffer^);
  6661. obj.setBoolean(buffer,F_OFFSET_1,False);
  6662. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6663. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6664. CheckEquals(0,valBuffer^);
  6665. end;
  6666. procedure TSDOLongField_Test.setByte();
  6667. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6668. VAL_1 = 12; VAL_2 = 123; VAL_3 = 0;
  6669. var
  6670. obj : ISDOField;
  6671. intVal : array[0..100] of Byte;
  6672. buffer, tmpBuffer, attributeBuffer : PByte;
  6673. valBuffer : PSDOLong;
  6674. begin
  6675. FillChar(intVal,SizeOf(intVal),#0);
  6676. buffer := @intVal;
  6677. tmpBuffer := buffer;
  6678. attributeBuffer := buffer;
  6679. Inc(tmpBuffer);
  6680. valBuffer := PSDOLong(tmpBuffer);
  6681. obj := Create_Field();
  6682. obj.setByte(buffer,F_OFFSET_0,VAL_1);
  6683. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6684. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6685. CheckEquals(VAL_1,valBuffer^);
  6686. obj.setByte(buffer,F_OFFSET_0,VAL_2);
  6687. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6688. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6689. CheckEquals(VAL_2,valBuffer^);
  6690. obj.setByte(buffer,F_OFFSET_0,VAL_3);
  6691. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6692. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6693. CheckEquals(VAL_3,valBuffer^);
  6694. FillChar(intVal,SizeOf(intVal),#0);
  6695. Inc(tmpBuffer);
  6696. Inc(attributeBuffer);
  6697. valBuffer := PSDOLong(tmpBuffer);
  6698. obj.setByte(buffer,F_OFFSET_1,VAL_1);
  6699. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6700. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6701. CheckEquals(VAL_1,valBuffer^);
  6702. obj.setByte(buffer,F_OFFSET_1,VAL_2);
  6703. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6704. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6705. CheckEquals(VAL_2,valBuffer^);
  6706. obj.setByte(buffer,F_OFFSET_1,VAL_3);
  6707. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6708. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6709. CheckEquals(VAL_3,valBuffer^);
  6710. end;
  6711. procedure TSDOLongField_Test.setCharacter();
  6712. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6713. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  6714. var
  6715. obj : ISDOField;
  6716. intVal : array[0..100] of Byte;
  6717. buffer, tmpBuffer, attributeBuffer : PByte;
  6718. valBuffer : PSDOLong;
  6719. begin
  6720. FillChar(intVal,SizeOf(intVal),#0);
  6721. buffer := @intVal;
  6722. tmpBuffer := buffer;
  6723. attributeBuffer := buffer;
  6724. Inc(tmpBuffer);
  6725. valBuffer := PSDOLong(tmpBuffer);
  6726. obj := Create_Field();
  6727. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_1));
  6728. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6729. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6730. CheckEquals(VAL_1,valBuffer^);
  6731. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_2));
  6732. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6733. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6734. CheckEquals(VAL_2,valBuffer^);
  6735. FillChar(intVal,SizeOf(intVal),#0);
  6736. Inc(tmpBuffer);
  6737. Inc(attributeBuffer);
  6738. valBuffer := PSDOLong(tmpBuffer);
  6739. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_1));
  6740. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6741. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6742. CheckEquals(VAL_1,valBuffer^);
  6743. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_2));
  6744. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6745. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6746. CheckEquals(VAL_2,valBuffer^);
  6747. end;
  6748. procedure TSDOLongField_Test.setInteger();
  6749. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6750. VAL_1 = 12345678; VAL_2 = -98765432; VAL_3 = 0;
  6751. var
  6752. obj : ISDOField;
  6753. intVal : array[0..100] of Byte;
  6754. buffer, tmpBuffer, attributeBuffer : PByte;
  6755. valBuffer : PSDOLong;
  6756. begin
  6757. FillChar(intVal,SizeOf(intVal),#0);
  6758. buffer := @intVal;
  6759. tmpBuffer := buffer;
  6760. attributeBuffer := buffer;
  6761. Inc(tmpBuffer);
  6762. valBuffer := PSDOLong(tmpBuffer);
  6763. obj := Create_Field();
  6764. obj.setInteger(buffer,F_OFFSET_0,VAL_1);
  6765. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6766. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6767. CheckEquals(VAL_1,valBuffer^);
  6768. obj.setInteger(buffer,F_OFFSET_0,VAL_2);
  6769. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6770. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6771. CheckEquals(VAL_2,valBuffer^);
  6772. obj.setInteger(buffer,F_OFFSET_0,VAL_3);
  6773. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6774. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6775. CheckEquals(VAL_3,valBuffer^);
  6776. FillChar(intVal,SizeOf(intVal),#0);
  6777. Inc(tmpBuffer);
  6778. Inc(attributeBuffer);
  6779. valBuffer := PSDOLong(tmpBuffer);
  6780. obj.setInteger(buffer,F_OFFSET_1,VAL_1);
  6781. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6782. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6783. CheckEquals(VAL_1,valBuffer^);
  6784. obj.setInteger(buffer,F_OFFSET_1,VAL_2);
  6785. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6786. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6787. CheckEquals(VAL_2,valBuffer^);
  6788. obj.setInteger(buffer,F_OFFSET_1,VAL_3);
  6789. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6790. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6791. CheckEquals(VAL_3,valBuffer^);
  6792. end;
  6793. procedure TSDOLongField_Test.setLong();
  6794. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6795. VAL_1 = 1234586791234567; VAL_2 = -98765532166547; VAL_3 = 0;
  6796. var
  6797. obj : ISDOField;
  6798. intVal : array[0..100] of Byte;
  6799. buffer, tmpBuffer, attributeBuffer : PByte;
  6800. valBuffer : PSDOLong;
  6801. begin
  6802. FillChar(intVal,SizeOf(intVal),#0);
  6803. buffer := @intVal;
  6804. tmpBuffer := buffer;
  6805. attributeBuffer := buffer;
  6806. Inc(tmpBuffer);
  6807. valBuffer := PSDOLong(tmpBuffer);
  6808. obj := Create_Field();
  6809. obj.setLong(buffer,F_OFFSET_0,VAL_1);
  6810. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6811. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6812. CheckEquals(VAL_1,valBuffer^);
  6813. obj.setLong(buffer,F_OFFSET_0,VAL_2);
  6814. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6815. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6816. CheckEquals(VAL_2,valBuffer^);
  6817. obj.setLong(buffer,F_OFFSET_0,VAL_3);
  6818. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6819. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6820. CheckEquals(VAL_3,valBuffer^);
  6821. FillChar(intVal,SizeOf(intVal),#0);
  6822. Inc(tmpBuffer);
  6823. Inc(attributeBuffer);
  6824. valBuffer := PSDOLong(tmpBuffer);
  6825. obj.setLong(buffer,F_OFFSET_1,VAL_1);
  6826. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6827. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6828. CheckEquals(VAL_1,valBuffer^);
  6829. obj.setLong(buffer,F_OFFSET_1,VAL_2);
  6830. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6831. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6832. CheckEquals(VAL_2,valBuffer^);
  6833. obj.setLong(buffer,F_OFFSET_1,VAL_3);
  6834. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6835. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6836. CheckEquals(VAL_3,valBuffer^);
  6837. end;
  6838. procedure TSDOLongField_Test.setShort();
  6839. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6840. VAL_1 = 123; VAL_2 = -9876; VAL_3 = 0;
  6841. var
  6842. obj : ISDOField;
  6843. intVal : array[0..100] of Byte;
  6844. buffer, tmpBuffer, attributeBuffer : PByte;
  6845. valBuffer : PSDOLong;
  6846. begin
  6847. FillChar(intVal,SizeOf(intVal),#0);
  6848. buffer := @intVal;
  6849. tmpBuffer := buffer;
  6850. attributeBuffer := buffer;
  6851. Inc(tmpBuffer);
  6852. valBuffer := PSDOLong(tmpBuffer);
  6853. obj := Create_Field();
  6854. obj.setShort(buffer,F_OFFSET_0,VAL_1);
  6855. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6856. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6857. CheckEquals(VAL_1,valBuffer^);
  6858. obj.setShort(buffer,F_OFFSET_0,VAL_2);
  6859. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6860. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6861. CheckEquals(VAL_2,valBuffer^);
  6862. obj.setShort(buffer,F_OFFSET_0,VAL_3);
  6863. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6864. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6865. CheckEquals(VAL_3,valBuffer^);
  6866. FillChar(intVal,SizeOf(intVal),#0);
  6867. Inc(tmpBuffer);
  6868. Inc(attributeBuffer);
  6869. valBuffer := PSDOLong(tmpBuffer);
  6870. obj.setShort(buffer,F_OFFSET_1,VAL_1);
  6871. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6872. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6873. CheckEquals(VAL_1,valBuffer^);
  6874. obj.setShort(buffer,F_OFFSET_1,VAL_2);
  6875. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6876. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6877. CheckEquals(VAL_2,valBuffer^);
  6878. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  6879. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6880. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6881. CheckEquals(VAL_3,valBuffer^);
  6882. end;
  6883. procedure TSDOLongField_Test.setString();
  6884. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6885. VAL_1 = 12345678912345; VAL_2 = -987654321654321; VAL_3 = 0;
  6886. var
  6887. obj : ISDOField;
  6888. intVal : array[0..100] of Byte;
  6889. buffer, tmpBuffer, attributeBuffer : PByte;
  6890. valBuffer : PSDOLong;
  6891. begin
  6892. FillChar(intVal,SizeOf(intVal),#0);
  6893. buffer := @intVal;
  6894. tmpBuffer := buffer;
  6895. attributeBuffer := buffer;
  6896. Inc(tmpBuffer);
  6897. valBuffer := PSDOLong(tmpBuffer);
  6898. obj := Create_Field();
  6899. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_1));
  6900. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6901. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6902. CheckEquals(VAL_1,valBuffer^);
  6903. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_2));
  6904. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6905. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6906. CheckEquals(VAL_2,valBuffer^);
  6907. FillChar(intVal,SizeOf(intVal),#0);
  6908. Inc(tmpBuffer);
  6909. Inc(attributeBuffer);
  6910. valBuffer := PSDOLong(tmpBuffer);
  6911. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_1));
  6912. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6913. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6914. CheckEquals(VAL_1,valBuffer^);
  6915. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_2));
  6916. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  6917. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  6918. CheckEquals(VAL_2,valBuffer^);
  6919. end;
  6920. {$ENDIF HAS_SDO_LONG}
  6921. {$IFDEF HAS_SDO_SHORT}
  6922. { TSDOShortField_Test }
  6923. function TSDOShortField_Test.Create_Field() : ISDOField;
  6924. begin
  6925. Result := TSDOShortField.Create() as ISDOField;
  6926. end;
  6927. procedure TSDOShortField_Test.getBoolean();
  6928. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6929. VAL_1 = 12345; VAL_2 = -9876; VAL_3 = 0;
  6930. var
  6931. obj : ISDOField;
  6932. intVal : array[0..100] of Byte;
  6933. buffer, tmpBuffer, attributeBuffer : PByte;
  6934. valBuffer : PSDOShort;
  6935. begin
  6936. FillChar(intVal,SizeOf(intVal),#0);
  6937. buffer := @intVal;
  6938. tmpBuffer := buffer;
  6939. attributeBuffer := buffer;
  6940. Inc(tmpBuffer);
  6941. valBuffer := PSDOShort(tmpBuffer);
  6942. obj := Create_Field();
  6943. valBuffer^ := VAL_1;
  6944. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6945. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6946. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6947. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6948. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6949. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6950. valBuffer^ := VAL_2;
  6951. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6952. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6953. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6954. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6955. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6956. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_0));
  6957. valBuffer^ := VAL_3;
  6958. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6959. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6960. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  6961. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6962. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6963. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_0));
  6964. FillChar(intVal,SizeOf(intVal),#0);
  6965. Inc(tmpBuffer);
  6966. Inc(attributeBuffer);
  6967. valBuffer := PSDOShort(tmpBuffer);
  6968. valBuffer^ := VAL_1;
  6969. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6970. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6971. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6972. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6973. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6974. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6975. valBuffer^ := VAL_2;
  6976. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6977. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6978. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6979. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6980. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6981. CheckEquals(True,obj.getBoolean(buffer,F_OFFSET_1));
  6982. valBuffer^ := VAL_3;
  6983. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  6984. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6985. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  6986. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  6987. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  6988. CheckEquals(False,obj.getBoolean(buffer,F_OFFSET_1));
  6989. end;
  6990. procedure TSDOShortField_Test.getByte();
  6991. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  6992. VAL_1 = 12; VAL_2 = 123; VAL_3 = 0;
  6993. var
  6994. obj : ISDOField;
  6995. intVal : array[0..100] of Byte;
  6996. buffer, tmpBuffer, attributeBuffer : PByte;
  6997. valBuffer : PSDOShort;
  6998. begin
  6999. FillChar(intVal,SizeOf(intVal),#0);
  7000. buffer := @intVal;
  7001. tmpBuffer := buffer;
  7002. attributeBuffer := buffer;
  7003. Inc(tmpBuffer);
  7004. valBuffer := PSDOShort(tmpBuffer);
  7005. obj := Create_Field();
  7006. valBuffer^ := VAL_1;
  7007. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7008. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7009. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7010. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7011. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  7012. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7013. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7014. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7015. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7016. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_0));
  7017. valBuffer^ := VAL_2;
  7018. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7019. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7020. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7021. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7022. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  7023. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7024. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7025. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7026. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7027. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_0));
  7028. valBuffer^ := VAL_3;
  7029. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7030. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7031. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7032. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7033. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  7034. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7035. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7036. CheckEquals(0,obj.getByte(buffer,F_OFFSET_0));
  7037. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7038. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_0));
  7039. FillChar(intVal,SizeOf(intVal),#0);
  7040. Inc(tmpBuffer);
  7041. Inc(attributeBuffer);
  7042. valBuffer := PSDOShort(tmpBuffer);
  7043. valBuffer^ := VAL_1;
  7044. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7045. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7046. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7047. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7048. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  7049. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7050. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7051. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7052. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7053. CheckEquals(VAL_1,obj.getByte(buffer,F_OFFSET_1));
  7054. valBuffer^ := VAL_2;
  7055. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7056. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7057. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7058. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7059. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  7060. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7061. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7062. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7063. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7064. CheckEquals(VAL_2,obj.getByte(buffer,F_OFFSET_1));
  7065. valBuffer^ := VAL_3;
  7066. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7067. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7068. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7069. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7070. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  7071. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7072. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7073. CheckEquals(0,obj.getByte(buffer,F_OFFSET_1));
  7074. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7075. CheckEquals(VAL_3,obj.getByte(buffer,F_OFFSET_1));
  7076. end;
  7077. procedure TSDOShortField_Test.getCharacter();
  7078. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7079. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  7080. var
  7081. obj : ISDOField;
  7082. intVal : array[0..100] of Byte;
  7083. buffer, tmpBuffer, attributeBuffer : PByte;
  7084. valBuffer : PSDOShort;
  7085. begin
  7086. FillChar(intVal,SizeOf(intVal),#0);
  7087. buffer := @intVal;
  7088. tmpBuffer := buffer;
  7089. attributeBuffer := buffer;
  7090. Inc(tmpBuffer);
  7091. valBuffer := PSDOShort(tmpBuffer);
  7092. obj := Create_Field();
  7093. valBuffer^ := VAL_1;
  7094. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7095. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7096. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  7097. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7098. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7099. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_0));
  7100. valBuffer^ := VAL_2;
  7101. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7102. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7103. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  7104. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7105. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7106. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_0));
  7107. valBuffer^ := VAL_3;
  7108. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7109. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7110. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  7111. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7112. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7113. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_0));
  7114. FillChar(intVal,SizeOf(intVal),#0);
  7115. Inc(tmpBuffer);
  7116. Inc(attributeBuffer);
  7117. valBuffer := PSDOShort(tmpBuffer);
  7118. valBuffer^ := VAL_1;
  7119. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7120. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7121. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  7122. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7123. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7124. CheckEquals(TSDOChar(VAL_1),obj.getCharacter(buffer,F_OFFSET_1));
  7125. valBuffer^ := VAL_2;
  7126. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7127. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7128. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  7129. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7130. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7131. CheckEquals(TSDOChar(VAL_2),obj.getCharacter(buffer,F_OFFSET_1));
  7132. valBuffer^ := VAL_3;
  7133. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7134. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7135. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  7136. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7137. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7138. CheckEquals(TSDOChar(VAL_3),obj.getCharacter(buffer,F_OFFSET_1));
  7139. end;
  7140. procedure TSDOShortField_Test.getInteger();
  7141. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7142. VAL_1 = 1234; VAL_2 = -7894; VAL_3 = 0;
  7143. var
  7144. obj : ISDOField;
  7145. intVal : array[0..100] of Byte;
  7146. buffer, tmpBuffer, attributeBuffer : PByte;
  7147. valBuffer : PSDOShort;
  7148. begin
  7149. FillChar(intVal,SizeOf(intVal),#0);
  7150. buffer := @intVal;
  7151. tmpBuffer := buffer;
  7152. attributeBuffer := buffer;
  7153. Inc(tmpBuffer);
  7154. valBuffer := PSDOShort(tmpBuffer);
  7155. obj := Create_Field();
  7156. valBuffer^ := VAL_1;
  7157. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7158. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7159. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7160. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7161. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  7162. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7163. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7164. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7165. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7166. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_0));
  7167. valBuffer^ := VAL_2;
  7168. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7169. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7170. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7171. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7172. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  7173. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7174. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7175. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7176. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7177. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_0));
  7178. valBuffer^ := VAL_3;
  7179. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7180. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7181. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7182. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7183. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  7184. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7185. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7186. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_0));
  7187. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7188. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_0));
  7189. FillChar(intVal,SizeOf(intVal),#0);
  7190. Inc(tmpBuffer);
  7191. Inc(attributeBuffer);
  7192. valBuffer := PSDOShort(tmpBuffer);
  7193. valBuffer^ := VAL_1;
  7194. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7195. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7196. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7197. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7198. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  7199. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7200. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7201. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7202. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7203. CheckEquals(VAL_1,obj.getInteger(buffer,F_OFFSET_1));
  7204. valBuffer^ := VAL_2;
  7205. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7206. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7207. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7208. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7209. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  7210. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7211. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7212. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7213. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7214. CheckEquals(VAL_2,obj.getInteger(buffer,F_OFFSET_1));
  7215. valBuffer^ := VAL_3;
  7216. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7217. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7218. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7219. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7220. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  7221. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7222. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7223. CheckEquals(0,obj.getInteger(buffer,F_OFFSET_1));
  7224. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7225. CheckEquals(VAL_3,obj.getInteger(buffer,F_OFFSET_1));
  7226. end;
  7227. procedure TSDOShortField_Test.getLong();
  7228. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7229. VAL_1 = 1234; VAL_2 = -987; VAL_3 = 0;
  7230. var
  7231. obj : ISDOField;
  7232. intVal : array[0..100] of Byte;
  7233. buffer, tmpBuffer, attributeBuffer : PByte;
  7234. valBuffer : PSDOLong;
  7235. begin
  7236. FillChar(intVal,SizeOf(intVal),#0);
  7237. buffer := @intVal;
  7238. tmpBuffer := buffer;
  7239. attributeBuffer := buffer;
  7240. Inc(tmpBuffer);
  7241. valBuffer := PSDOLong(tmpBuffer);
  7242. obj := Create_Field();
  7243. valBuffer^ := VAL_1;
  7244. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7245. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7246. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7247. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7248. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  7249. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7250. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7251. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7252. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7253. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_0));
  7254. valBuffer^ := VAL_2;
  7255. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7256. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7257. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7258. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7259. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  7260. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7261. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7262. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7263. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7264. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_0));
  7265. valBuffer^ := VAL_3;
  7266. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7267. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7268. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7269. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7270. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  7271. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7272. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7273. CheckEquals(0,obj.getLong(buffer,F_OFFSET_0));
  7274. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7275. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_0));
  7276. FillChar(intVal,SizeOf(intVal),#0);
  7277. Inc(tmpBuffer);
  7278. Inc(attributeBuffer);
  7279. valBuffer := PSDOLong(tmpBuffer);
  7280. valBuffer^ := VAL_1;
  7281. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7282. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7283. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7284. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7285. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  7286. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7287. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7288. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7289. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7290. CheckEquals(VAL_1,obj.getLong(buffer,F_OFFSET_1));
  7291. valBuffer^ := VAL_2;
  7292. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7293. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7294. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7295. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7296. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  7297. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7298. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7299. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7300. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7301. CheckEquals(VAL_2,obj.getLong(buffer,F_OFFSET_1));
  7302. valBuffer^ := VAL_3;
  7303. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7304. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7305. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7306. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7307. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  7308. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7309. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7310. CheckEquals(0,obj.getLong(buffer,F_OFFSET_1));
  7311. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7312. CheckEquals(VAL_3,obj.getLong(buffer,F_OFFSET_1));
  7313. end;
  7314. procedure TSDOShortField_Test.getShort();
  7315. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7316. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  7317. var
  7318. obj : ISDOField;
  7319. intVal : array[0..100] of Byte;
  7320. buffer, tmpBuffer, attributeBuffer : PByte;
  7321. valBuffer : PSDOShort;
  7322. begin
  7323. FillChar(intVal,SizeOf(intVal),#0);
  7324. buffer := @intVal;
  7325. tmpBuffer := buffer;
  7326. attributeBuffer := buffer;
  7327. Inc(tmpBuffer);
  7328. valBuffer := PSDOShort(tmpBuffer);
  7329. obj := Create_Field();
  7330. valBuffer^ := VAL_1;
  7331. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7332. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7333. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7334. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7335. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  7336. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7337. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7338. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7339. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7340. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_0));
  7341. valBuffer^ := VAL_2;
  7342. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7343. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7344. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7345. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7346. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  7347. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7348. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7349. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7350. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7351. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_0));
  7352. valBuffer^ := VAL_3;
  7353. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7354. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7355. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7356. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7357. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  7358. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7359. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7360. CheckEquals(0,obj.getShort(buffer,F_OFFSET_0));
  7361. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7362. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_0));
  7363. FillChar(intVal,SizeOf(intVal),#0);
  7364. Inc(tmpBuffer);
  7365. Inc(attributeBuffer);
  7366. valBuffer := PSDOShort(tmpBuffer);
  7367. valBuffer^ := VAL_1;
  7368. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7369. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7370. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7371. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7372. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  7373. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7374. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7375. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7376. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7377. CheckEquals(VAL_1,obj.getShort(buffer,F_OFFSET_1));
  7378. valBuffer^ := VAL_2;
  7379. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7380. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7381. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7382. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7383. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  7384. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7385. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7386. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7387. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7388. CheckEquals(VAL_2,obj.getShort(buffer,F_OFFSET_1));
  7389. valBuffer^ := VAL_3;
  7390. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7391. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7392. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7393. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7394. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  7395. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7396. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7397. CheckEquals(0,obj.getShort(buffer,F_OFFSET_1));
  7398. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7399. CheckEquals(VAL_3,obj.getShort(buffer,F_OFFSET_1));
  7400. end;
  7401. procedure TSDOShortField_Test.getString();
  7402. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7403. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  7404. var
  7405. obj : ISDOField;
  7406. intVal : array[0..100] of Byte;
  7407. buffer, tmpBuffer, attributeBuffer : PByte;
  7408. valBuffer : PSDOShort;
  7409. begin
  7410. FillChar(intVal,SizeOf(intVal),#0);
  7411. buffer := @intVal;
  7412. tmpBuffer := buffer;
  7413. attributeBuffer := buffer;
  7414. Inc(tmpBuffer);
  7415. valBuffer := PSDOShort(tmpBuffer);
  7416. obj := Create_Field();
  7417. valBuffer^ := VAL_1;
  7418. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7419. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7420. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  7421. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7422. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7423. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_0));
  7424. valBuffer^ := VAL_2;
  7425. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7426. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7427. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  7428. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7429. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7430. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_0));
  7431. valBuffer^ := VAL_3;
  7432. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7433. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7434. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  7435. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7436. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7437. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_0));
  7438. FillChar(intVal,SizeOf(intVal),#0);
  7439. Inc(tmpBuffer);
  7440. Inc(attributeBuffer);
  7441. valBuffer := PSDOShort(tmpBuffer);
  7442. valBuffer^ := VAL_1;
  7443. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7444. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7445. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  7446. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7447. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7448. CheckEquals(IntToStr(VAL_1),obj.getString(buffer,F_OFFSET_1));
  7449. valBuffer^ := VAL_2;
  7450. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7451. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7452. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  7453. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7454. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7455. CheckEquals(IntToStr(VAL_2),obj.getString(buffer,F_OFFSET_1));
  7456. valBuffer^ := VAL_3;
  7457. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7458. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7459. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  7460. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7461. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7462. CheckEquals(IntToStr(VAL_3),obj.getString(buffer,F_OFFSET_1));
  7463. end;
  7464. procedure TSDOShortField_Test.setBoolean();
  7465. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7466. var
  7467. obj : ISDOField;
  7468. intVal : array[0..100] of Byte;
  7469. buffer, tmpBuffer, attributeBuffer : PByte;
  7470. valBuffer : PSDOShort;
  7471. begin
  7472. FillChar(intVal,SizeOf(intVal),#0);
  7473. buffer := @intVal;
  7474. tmpBuffer := buffer;
  7475. attributeBuffer := buffer;
  7476. Inc(tmpBuffer);
  7477. valBuffer := PSDOShort(tmpBuffer);
  7478. obj := Create_Field();
  7479. obj.setBoolean(buffer,F_OFFSET_0,True);
  7480. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7481. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7482. CheckEquals(1,valBuffer^);
  7483. obj.setBoolean(buffer,F_OFFSET_0,False);
  7484. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7485. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7486. CheckEquals(0,valBuffer^);
  7487. FillChar(intVal,SizeOf(intVal),#0);
  7488. Inc(tmpBuffer);
  7489. Inc(attributeBuffer);
  7490. valBuffer := PSDOShort(tmpBuffer);
  7491. obj.setBoolean(buffer,F_OFFSET_1,True);
  7492. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7493. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7494. CheckEquals(1,valBuffer^);
  7495. obj.setBoolean(buffer,F_OFFSET_1,False);
  7496. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7497. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7498. CheckEquals(0,valBuffer^);
  7499. end;
  7500. procedure TSDOShortField_Test.setByte();
  7501. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7502. VAL_1 = 12; VAL_2 = 123; VAL_3 = 0;
  7503. var
  7504. obj : ISDOField;
  7505. intVal : array[0..100] of Byte;
  7506. buffer, tmpBuffer, attributeBuffer : PByte;
  7507. valBuffer : PSDOShort;
  7508. begin
  7509. FillChar(intVal,SizeOf(intVal),#0);
  7510. buffer := @intVal;
  7511. tmpBuffer := buffer;
  7512. attributeBuffer := buffer;
  7513. Inc(tmpBuffer);
  7514. valBuffer := PSDOShort(tmpBuffer);
  7515. obj := Create_Field();
  7516. obj.setByte(buffer,F_OFFSET_0,VAL_1);
  7517. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7518. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7519. CheckEquals(VAL_1,valBuffer^);
  7520. obj.setByte(buffer,F_OFFSET_0,VAL_2);
  7521. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7522. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7523. CheckEquals(VAL_2,valBuffer^);
  7524. obj.setByte(buffer,F_OFFSET_0,VAL_3);
  7525. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7526. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7527. CheckEquals(VAL_3,valBuffer^);
  7528. FillChar(intVal,SizeOf(intVal),#0);
  7529. Inc(tmpBuffer);
  7530. Inc(attributeBuffer);
  7531. valBuffer := PSDOShort(tmpBuffer);
  7532. obj.setByte(buffer,F_OFFSET_1,VAL_1);
  7533. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7534. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7535. CheckEquals(VAL_1,valBuffer^);
  7536. obj.setByte(buffer,F_OFFSET_1,VAL_2);
  7537. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7538. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7539. CheckEquals(VAL_2,valBuffer^);
  7540. obj.setByte(buffer,F_OFFSET_1,VAL_3);
  7541. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7542. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7543. CheckEquals(VAL_3,valBuffer^);
  7544. end;
  7545. procedure TSDOShortField_Test.setCharacter();
  7546. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7547. VAL_1 = Ord(TSDOChar('I')); VAL_2 = Ord(TSDOChar('W')); VAL_3 = 0;
  7548. var
  7549. obj : ISDOField;
  7550. intVal : array[0..100] of Byte;
  7551. buffer, tmpBuffer, attributeBuffer : PByte;
  7552. valBuffer : PSDOShort;
  7553. begin
  7554. FillChar(intVal,SizeOf(intVal),#0);
  7555. buffer := @intVal;
  7556. tmpBuffer := buffer;
  7557. attributeBuffer := buffer;
  7558. Inc(tmpBuffer);
  7559. valBuffer := PSDOShort(tmpBuffer);
  7560. obj := Create_Field();
  7561. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_1));
  7562. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7563. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7564. CheckEquals(VAL_1,valBuffer^);
  7565. obj.setCharacter(buffer,F_OFFSET_0,TSDOChar(VAL_2));
  7566. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7567. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7568. CheckEquals(VAL_2,valBuffer^);
  7569. FillChar(intVal,SizeOf(intVal),#0);
  7570. Inc(tmpBuffer);
  7571. Inc(attributeBuffer);
  7572. valBuffer := PSDOShort(tmpBuffer);
  7573. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_1));
  7574. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7575. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7576. CheckEquals(VAL_1,valBuffer^);
  7577. obj.setCharacter(buffer,F_OFFSET_1,TSDOChar(VAL_2));
  7578. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7579. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7580. CheckEquals(VAL_2,valBuffer^);
  7581. end;
  7582. procedure TSDOShortField_Test.setInteger();
  7583. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7584. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  7585. var
  7586. obj : ISDOField;
  7587. intVal : array[0..100] of Byte;
  7588. buffer, tmpBuffer, attributeBuffer : PByte;
  7589. valBuffer : PSDOShort;
  7590. begin
  7591. FillChar(intVal,SizeOf(intVal),#0);
  7592. buffer := @intVal;
  7593. tmpBuffer := buffer;
  7594. attributeBuffer := buffer;
  7595. Inc(tmpBuffer);
  7596. valBuffer := PSDOShort(tmpBuffer);
  7597. obj := Create_Field();
  7598. obj.setInteger(buffer,F_OFFSET_0,VAL_1);
  7599. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7600. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7601. CheckEquals(VAL_1,valBuffer^);
  7602. obj.setInteger(buffer,F_OFFSET_0,VAL_2);
  7603. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7604. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7605. CheckEquals(VAL_2,valBuffer^);
  7606. obj.setInteger(buffer,F_OFFSET_0,VAL_3);
  7607. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7608. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7609. CheckEquals(VAL_3,valBuffer^);
  7610. FillChar(intVal,SizeOf(intVal),#0);
  7611. Inc(tmpBuffer);
  7612. Inc(attributeBuffer);
  7613. valBuffer := PSDOShort(tmpBuffer);
  7614. obj.setInteger(buffer,F_OFFSET_1,VAL_1);
  7615. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7616. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7617. CheckEquals(VAL_1,valBuffer^);
  7618. obj.setInteger(buffer,F_OFFSET_1,VAL_2);
  7619. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7620. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7621. CheckEquals(VAL_2,valBuffer^);
  7622. obj.setInteger(buffer,F_OFFSET_1,VAL_3);
  7623. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7624. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7625. CheckEquals(VAL_3,valBuffer^);
  7626. end;
  7627. procedure TSDOShortField_Test.setLong();
  7628. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7629. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  7630. var
  7631. obj : ISDOField;
  7632. intVal : array[0..100] of Byte;
  7633. buffer, tmpBuffer, attributeBuffer : PByte;
  7634. valBuffer : PSDOShort;
  7635. begin
  7636. FillChar(intVal,SizeOf(intVal),#0);
  7637. buffer := @intVal;
  7638. tmpBuffer := buffer;
  7639. attributeBuffer := buffer;
  7640. Inc(tmpBuffer);
  7641. valBuffer := PSDOShort(tmpBuffer);
  7642. obj := Create_Field();
  7643. obj.setLong(buffer,F_OFFSET_0,VAL_1);
  7644. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7645. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7646. CheckEquals(VAL_1,valBuffer^);
  7647. obj.setLong(buffer,F_OFFSET_0,VAL_2);
  7648. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7649. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7650. CheckEquals(VAL_2,valBuffer^);
  7651. obj.setLong(buffer,F_OFFSET_0,VAL_3);
  7652. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7653. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7654. CheckEquals(VAL_3,valBuffer^);
  7655. FillChar(intVal,SizeOf(intVal),#0);
  7656. Inc(tmpBuffer);
  7657. Inc(attributeBuffer);
  7658. valBuffer := PSDOShort(tmpBuffer);
  7659. obj.setLong(buffer,F_OFFSET_1,VAL_1);
  7660. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7661. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7662. CheckEquals(VAL_1,valBuffer^);
  7663. obj.setLong(buffer,F_OFFSET_1,VAL_2);
  7664. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7665. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7666. CheckEquals(VAL_2,valBuffer^);
  7667. obj.setLong(buffer,F_OFFSET_1,VAL_3);
  7668. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7669. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7670. CheckEquals(VAL_3,valBuffer^);
  7671. end;
  7672. procedure TSDOShortField_Test.setShort();
  7673. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7674. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  7675. var
  7676. obj : ISDOField;
  7677. intVal : QWord;
  7678. buffer, tmpBuffer, attributeBuffer : PByte;
  7679. valBuffer : PSDOShort;
  7680. begin
  7681. FillChar(intVal,SizeOf(intVal),#0);
  7682. buffer := @intVal;
  7683. tmpBuffer := buffer;
  7684. attributeBuffer := buffer;
  7685. Inc(tmpBuffer);
  7686. valBuffer := PSDOShort(tmpBuffer);
  7687. obj := Create_Field();
  7688. obj.setShort(buffer,F_OFFSET_0,VAL_1);
  7689. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7690. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7691. CheckEquals(VAL_1,valBuffer^);
  7692. obj.setShort(buffer,F_OFFSET_0,VAL_2);
  7693. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7694. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7695. CheckEquals(VAL_2,valBuffer^);
  7696. obj.setShort(buffer,F_OFFSET_0,VAL_3);
  7697. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7698. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7699. CheckEquals(VAL_3,valBuffer^);
  7700. FillChar(intVal,SizeOf(intVal),#0);
  7701. Inc(tmpBuffer);
  7702. Inc(attributeBuffer);
  7703. valBuffer := PSDOShort(tmpBuffer);
  7704. obj.setShort(buffer,F_OFFSET_1,VAL_1);
  7705. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7706. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7707. CheckEquals(VAL_1,valBuffer^);
  7708. obj.setShort(buffer,F_OFFSET_1,VAL_2);
  7709. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7710. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7711. CheckEquals(VAL_2,valBuffer^);
  7712. obj.setShort(buffer,F_OFFSET_1,VAL_3);
  7713. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7714. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7715. CheckEquals(VAL_3,valBuffer^);
  7716. end;
  7717. procedure TSDOShortField_Test.setString();
  7718. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  7719. VAL_1 = 1234; VAL_2 = -9876; VAL_3 = 0;
  7720. var
  7721. obj : ISDOField;
  7722. intVal : array[0..100] of Byte;
  7723. buffer, tmpBuffer, attributeBuffer : PByte;
  7724. valBuffer : PSDOShort;
  7725. begin
  7726. FillChar(intVal,SizeOf(intVal),#0);
  7727. buffer := @intVal;
  7728. tmpBuffer := buffer;
  7729. attributeBuffer := buffer;
  7730. Inc(tmpBuffer);
  7731. valBuffer := PSDOShort(tmpBuffer);
  7732. obj := Create_Field();
  7733. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_1));
  7734. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7735. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7736. CheckEquals(VAL_1,valBuffer^);
  7737. obj.setString(buffer,F_OFFSET_0,IntToStr(VAL_2));
  7738. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7739. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7740. CheckEquals(VAL_2,valBuffer^);
  7741. FillChar(intVal,SizeOf(intVal),#0);
  7742. Inc(tmpBuffer);
  7743. Inc(attributeBuffer);
  7744. valBuffer := PSDOShort(tmpBuffer);
  7745. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_1));
  7746. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7747. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7748. CheckEquals(VAL_1,valBuffer^);
  7749. obj.setString(buffer,F_OFFSET_1,IntToStr(VAL_2));
  7750. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  7751. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  7752. CheckEquals(VAL_2,valBuffer^);
  7753. end;
  7754. {$ENDIF HAS_SDO_SHORT}
  7755. {$IFDEF HAS_SDO_BYTES}
  7756. { TSDOBytesField_Test }
  7757. class procedure TSDOBytesField_Test.CleanUpBuffer(var ABuffer: PPSDOBytes);
  7758. begin
  7759. if ( ABuffer <> nil ) then begin
  7760. ABuffer^^ := nil;
  7761. FreeMem(ABuffer^,SizeOf(PSDOBytes));
  7762. ABuffer^ := nil;
  7763. end;
  7764. end;
  7765. function TSDOBytesField_Test.Create_Field() : ISDOField;
  7766. begin
  7767. Result := TSDOBytesField.Create() as ISDOField;
  7768. end;
  7769. procedure TSDOBytesField_Test.getBytes();
  7770. const F_OFFSET_0 = 0; F_OFFSET_1 = 1; ZERO_BYTES : TSDOBytes = nil;
  7771. var
  7772. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  7773. procedure SetConstants();
  7774. var
  7775. v : TSDOBytes;
  7776. k : Integer;
  7777. begin
  7778. SetLength(v,100);
  7779. for k := 0 to High(v) do
  7780. v[k] := k mod High(Byte);
  7781. VAL_1 := v;
  7782. v := nil;
  7783. VAL_2 := nil;
  7784. SetLength(v,200);
  7785. for k := 0 to High(v) do
  7786. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  7787. VAL_3 := v;
  7788. end;
  7789. var
  7790. obj : ISDOField;
  7791. trueBuffer : array[0..( 3 * SizeOf(TSDOBytes))] of Byte;
  7792. buffer, tmpBuffer, attributeBuffer : PByte;
  7793. valBuffer : PPSDOBytes;
  7794. begin
  7795. SetConstants();
  7796. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  7797. buffer := @(trueBuffer[0]);
  7798. tmpBuffer := buffer;
  7799. attributeBuffer := buffer;
  7800. Inc(tmpBuffer);
  7801. valBuffer := PPSDOBytes(tmpBuffer);
  7802. obj := Create_Field();
  7803. valBuffer^ := @VAL_1; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  7804. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7805. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7806. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  7807. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7808. CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_0));
  7809. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7810. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7811. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  7812. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7813. CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_0));
  7814. valBuffer^ := nil;
  7815. valBuffer^ := @VAL_2; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  7816. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7817. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7818. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  7819. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7820. CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_0));
  7821. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7822. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7823. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  7824. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7825. CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_0));
  7826. valBuffer^ := nil;
  7827. valBuffer^ := @VAL_3; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  7828. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7829. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7830. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  7831. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7832. CheckEquals(VAL_3,obj.getBytes(buffer,F_OFFSET_0));
  7833. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7834. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7835. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_0));
  7836. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7837. CheckEquals(VAL_3,obj.getBytes(buffer,F_OFFSET_0));
  7838. valBuffer^ := nil;
  7839. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  7840. Inc(tmpBuffer);
  7841. Inc(attributeBuffer);
  7842. valBuffer := PPSDOBytes(tmpBuffer);
  7843. valBuffer^ := @VAL_1; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  7844. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7845. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7846. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  7847. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7848. CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_1));
  7849. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7850. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7851. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  7852. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7853. CheckEquals(VAL_1,obj.getBytes(buffer,F_OFFSET_1));
  7854. valBuffer^ := nil;
  7855. valBuffer^ := @VAL_2; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  7856. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7857. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7858. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  7859. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7860. CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_1));
  7861. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7862. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7863. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  7864. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7865. CheckEquals(VAL_2,obj.getBytes(buffer,F_OFFSET_1));
  7866. valBuffer^ := nil;
  7867. valBuffer^ := @VAL_3; SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  7868. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7869. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7870. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  7871. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7872. CheckEquals(VAL_3,obj.getBytes(buffer,F_OFFSET_1));
  7873. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7874. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  7875. CheckEquals(ZERO_BYTES,obj.getBytes(buffer,F_OFFSET_1));
  7876. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7877. CheckEquals(VAL_3,obj.getBytes(buffer,F_OFFSET_1));
  7878. valBuffer^ := nil;
  7879. end;
  7880. procedure TSDOBytesField_Test.getString();
  7881. const F_OFFSET_0 = 0; F_OFFSET_1 = 1; ZERO_BYTES : TSDOBytes = nil;
  7882. var
  7883. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  7884. procedure SetConstants();
  7885. var
  7886. v : TSDOBytes;
  7887. k : Integer;
  7888. begin
  7889. SetLength(v,100);
  7890. for k := 0 to High(v) do
  7891. v[k] := k mod High(Byte);
  7892. VAL_1 := v;
  7893. v := nil;
  7894. VAL_2 := nil;
  7895. SetLength(v,200);
  7896. for k := 0 to High(v) do
  7897. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  7898. VAL_3 := v;
  7899. end;
  7900. var
  7901. obj : ISDOField;
  7902. trueBuffer : array[0..100] of Byte;
  7903. buffer, tmpBuffer, attributeBuffer : PByte;
  7904. valBuffer : PPSDOBytes;
  7905. begin
  7906. SetConstants();
  7907. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  7908. buffer := @(trueBuffer[0]);
  7909. tmpBuffer := buffer;
  7910. attributeBuffer := buffer;
  7911. Inc(tmpBuffer);
  7912. valBuffer := PPSDOBytes(tmpBuffer);
  7913. obj := Create_Field();
  7914. GetMem(valBuffer^,SizeOf(PSDOBytes)); FillChar(valBuffer^^,SizeOf(TSDOBytes),#0);
  7915. SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  7916. try
  7917. valBuffer^^ := VAL_1;
  7918. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7919. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7920. CheckEquals(BytesToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  7921. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7922. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7923. CheckEquals(BytesToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  7924. valBuffer^^ := nil;
  7925. valBuffer^^ := VAL_2;
  7926. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7927. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7928. CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  7929. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7930. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7931. CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  7932. valBuffer^^ := nil;
  7933. valBuffer^^ := VAL_3;
  7934. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7935. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7936. CheckEquals(BytesToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  7937. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7938. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7939. CheckEquals(BytesToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  7940. valBuffer^^ := nil;
  7941. finally
  7942. FreeMem(valBuffer^,SizeOf(PSDOBytes));
  7943. valBuffer^ := nil;
  7944. end;
  7945. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  7946. Inc(tmpBuffer);
  7947. Inc(attributeBuffer);
  7948. valBuffer := PPSDOBytes(tmpBuffer);
  7949. GetMem(valBuffer^,SizeOf(PSDOBytes)); FillChar(valBuffer^^,SizeOf(TSDOBytes),#0);
  7950. SetBit(attributeBuffer^,BIT_ORDER_BUFFER,True);
  7951. try
  7952. valBuffer^^ := VAL_1;
  7953. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7954. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7955. CheckEquals(BytesToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  7956. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7957. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7958. CheckEquals(BytesToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  7959. valBuffer^^ := nil;
  7960. valBuffer^^ := VAL_2;
  7961. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7962. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7963. CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  7964. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7965. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7966. CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  7967. valBuffer^^ := nil;
  7968. valBuffer^^ := VAL_3;
  7969. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  7970. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7971. CheckEquals(BytesToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  7972. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  7973. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  7974. CheckEquals(BytesToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  7975. valBuffer^^ := nil;
  7976. finally
  7977. FreeMem(valBuffer^,SizeOf(PSDOBytes));
  7978. end;
  7979. end;
  7980. procedure TSDOBytesField_Test.setBytes();
  7981. const F_OFFSET_0 = 0; F_OFFSET_1 = 1; ZERO_BYTES : TSDOBytes = nil;
  7982. var
  7983. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  7984. procedure SetConstants();
  7985. var
  7986. v : TSDOBytes;
  7987. k : Integer;
  7988. begin
  7989. SetLength(v,100);
  7990. for k := 0 to High(v) do
  7991. v[k] := k mod High(Byte);
  7992. VAL_1 := v;
  7993. v := nil;
  7994. VAL_2 := nil;
  7995. SetLength(v,200);
  7996. for k := 0 to High(v) do
  7997. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  7998. VAL_3 := v;
  7999. end;
  8000. var
  8001. obj : ISDOField;
  8002. trueBuffer : array[0..100] of Byte;
  8003. buffer, tmpBuffer, startBuffer : PByte;
  8004. valBuffer : PPSDOBytes;
  8005. begin
  8006. SetConstants();
  8007. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8008. buffer := @(trueBuffer[0]);
  8009. tmpBuffer := buffer;
  8010. startBuffer := tmpBuffer;
  8011. Inc(tmpBuffer);
  8012. valBuffer := PPSDOBytes(tmpBuffer);
  8013. obj := Create_Field();
  8014. obj.setBytes(buffer,F_OFFSET_0,nil);
  8015. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8016. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8017. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8018. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  8019. obj.setBytes(buffer,F_OFFSET_0,VAL_1);
  8020. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8021. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8022. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8023. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8024. CheckEquals(VAL_1,valBuffer^^);
  8025. obj.setBytes(buffer,F_OFFSET_0,VAL_2);
  8026. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8027. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8028. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8029. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8030. CheckEquals(VAL_2,valBuffer^^);
  8031. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  8032. obj.setBytes(buffer,F_OFFSET_0,VAL_3);
  8033. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8034. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8035. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8036. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8037. CheckEquals(VAL_3,valBuffer^^);
  8038. // Clean up to avoid false MEM-LEAK
  8039. CleanUpBuffer(valBuffer);
  8040. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8041. startBuffer := tmpBuffer;
  8042. Inc(tmpBuffer);
  8043. valBuffer := PPSDOBytes(tmpBuffer);
  8044. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  8045. obj.setBytes(buffer,F_OFFSET_1,nil);
  8046. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8047. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8048. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8049. obj.setBytes(buffer,F_OFFSET_1,VAL_1);
  8050. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8051. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8052. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8053. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8054. CheckEquals(VAL_1,valBuffer^^);
  8055. SetBit(startBuffer^,BIT_ORDER_NULL,True);
  8056. obj.setBytes(buffer,F_OFFSET_1,VAL_2);
  8057. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8058. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8059. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8060. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8061. CheckEquals(VAL_2,valBuffer^^);
  8062. obj.setBytes(buffer,F_OFFSET_1,VAL_3);
  8063. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_SET), 'set bit');
  8064. CheckEquals(False, IsBitON(startBuffer^,BIT_ORDER_NULL), 'set bit');
  8065. CheckEquals(True, IsBitON(startBuffer^,BIT_ORDER_BUFFER), 'set bit');
  8066. CheckEquals(True, ( valBuffer^ <> nil ), 'bytes buffer' );
  8067. CheckEquals(VAL_3,valBuffer^^);
  8068. // Clean up to avoid false MEM-LEAK
  8069. CleanUpBuffer(valBuffer);
  8070. end;
  8071. procedure TSDOBytesField_Test.setString();
  8072. const F_OFFSET_0 = 0; F_OFFSET_1 = 1; ZERO_BYTES : TSDOBytes = nil;
  8073. var
  8074. VAL_1, VAL_2, VAL_3 : TSDOBytes;
  8075. procedure SetConstants();
  8076. var
  8077. v : TSDOBytes;
  8078. k : Integer;
  8079. begin
  8080. SetLength(v,100);
  8081. for k := 0 to High(v) do
  8082. v[k] := k mod High(Byte);
  8083. VAL_1 := v;
  8084. v := nil;
  8085. VAL_2 := nil;
  8086. SetLength(v,200);
  8087. for k := 0 to High(v) do
  8088. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  8089. VAL_3 := v;
  8090. end;
  8091. var
  8092. obj : ISDOField;
  8093. trueBuffer : array[0..( 3 * SizeOf(TSDOBytes))] of Byte;
  8094. buffer, tmpBuffer, attributeBuffer : PByte;
  8095. valBuffer : PPSDOBytes;
  8096. begin
  8097. SetConstants();
  8098. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8099. buffer := @(trueBuffer[0]);
  8100. tmpBuffer := buffer;
  8101. attributeBuffer := buffer;
  8102. Inc(tmpBuffer);
  8103. valBuffer := PPSDOBytes(tmpBuffer);
  8104. obj := Create_Field();
  8105. obj.setString(buffer,F_OFFSET_0,BytesToString(VAL_1));
  8106. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8107. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8108. CheckEquals(VAL_1,valBuffer^^);
  8109. obj.setString(buffer,F_OFFSET_0,BytesToString(VAL_2));
  8110. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8111. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8112. CheckEquals(VAL_2,valBuffer^^);
  8113. CleanUpBuffer(valBuffer);
  8114. FillChar(trueBuffer,SizeOf(trueBuffer),#0);
  8115. Inc(tmpBuffer);
  8116. Inc(attributeBuffer);
  8117. valBuffer := PPSDOBytes(tmpBuffer);
  8118. obj.setString(buffer,F_OFFSET_1,BytesToString(VAL_1));
  8119. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8120. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8121. CheckEquals(VAL_1,valBuffer^^);
  8122. obj.setString(buffer,F_OFFSET_1,BytesToString(VAL_2));
  8123. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8124. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8125. CheckEquals(VAL_2,valBuffer^^);
  8126. CleanUpBuffer(valBuffer);
  8127. end;
  8128. {$ENDIF HAS_SDO_BYTES}
  8129. {$IFDEF HAS_SDO_CURRENCY}
  8130. function TSDOCurrencyField_Test.Create_Field() : ISDOField;
  8131. begin
  8132. Result := TSDOCurrencyField.Create() as ISDOField;
  8133. end;
  8134. procedure TSDOCurrencyField_Test.getCurrency();
  8135. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8136. VAL_1 : TSDOCurrency = 123458679123.1234; VAL_2 : TSDOCurrency = -98765532166547.9876; VAL_3 : TSDOCurrency = 0;
  8137. var
  8138. obj : ISDOField;
  8139. intVal : array[0..100] of Byte;
  8140. buffer, tmpBuffer, attributeBuffer : PByte;
  8141. valBuffer : PSDOCurrency;
  8142. begin
  8143. FillChar(intVal,SizeOf(intVal),#0);
  8144. buffer := @intVal;
  8145. tmpBuffer := buffer;
  8146. attributeBuffer := buffer;
  8147. Inc(tmpBuffer);
  8148. valBuffer := PSDOCurrency(tmpBuffer);
  8149. obj := Create_Field();
  8150. valBuffer^ := VAL_1;
  8151. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8152. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8153. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8154. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8155. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
  8156. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8157. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8158. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8159. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8160. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_0));
  8161. valBuffer^ := VAL_2;
  8162. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8163. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8164. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8165. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8166. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
  8167. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8168. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8169. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8170. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8171. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_0));
  8172. valBuffer^ := VAL_3;
  8173. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8174. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8175. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8176. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8177. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
  8178. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8179. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8180. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_0));
  8181. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8182. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_0));
  8183. FillChar(intVal,SizeOf(intVal),#0);
  8184. Inc(tmpBuffer);
  8185. Inc(attributeBuffer);
  8186. valBuffer := PSDOCurrency(tmpBuffer);
  8187. valBuffer^ := VAL_1;
  8188. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8189. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8190. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8191. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8192. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
  8193. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8194. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8195. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8196. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8197. CheckEquals(VAL_1,obj.getCurrency(buffer,F_OFFSET_1));
  8198. valBuffer^ := VAL_2;
  8199. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8200. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8201. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8202. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8203. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
  8204. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8205. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8206. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8207. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8208. CheckEquals(VAL_2,obj.getCurrency(buffer,F_OFFSET_1));
  8209. valBuffer^ := VAL_3;
  8210. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8211. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8212. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8213. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8214. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
  8215. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8216. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8217. CheckEquals(0,obj.getCurrency(buffer,F_OFFSET_1));
  8218. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8219. CheckEquals(VAL_3,obj.getCurrency(buffer,F_OFFSET_1));
  8220. end;
  8221. procedure TSDOCurrencyField_Test.setCurrency();
  8222. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8223. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8224. var
  8225. obj : ISDOField;
  8226. intVal : array[0..100] of Byte;
  8227. buffer, tmpBuffer, attributeBuffer : PByte;
  8228. valBuffer : PSDOCurrency;
  8229. begin
  8230. FillChar(intVal,SizeOf(intVal),#0);
  8231. buffer := @intVal;
  8232. tmpBuffer := buffer;
  8233. attributeBuffer := buffer;
  8234. Inc(tmpBuffer);
  8235. valBuffer := PSDOCurrency(tmpBuffer);
  8236. obj := Create_Field();
  8237. obj.setDouble(buffer,F_OFFSET_0,VAL_1);
  8238. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8239. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8240. CheckEquals(VAL_1,valBuffer^);
  8241. obj.setDouble(buffer,F_OFFSET_0,VAL_2);
  8242. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8243. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8244. CheckEquals(VAL_2,valBuffer^);
  8245. obj.setDouble(buffer,F_OFFSET_0,VAL_3);
  8246. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8247. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8248. CheckEquals(VAL_3,valBuffer^);
  8249. FillChar(intVal,SizeOf(intVal),#0);
  8250. Inc(tmpBuffer);
  8251. Inc(attributeBuffer);
  8252. valBuffer := PSDOCurrency(tmpBuffer);
  8253. obj.setDouble(buffer,F_OFFSET_1,VAL_1);
  8254. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8255. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8256. CheckEquals(VAL_1,valBuffer^);
  8257. obj.setDouble(buffer,F_OFFSET_1,VAL_2);
  8258. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8259. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8260. CheckEquals(VAL_2,valBuffer^);
  8261. obj.setDouble(buffer,F_OFFSET_1,VAL_3);
  8262. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8263. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8264. CheckEquals(VAL_3,valBuffer^);
  8265. end;
  8266. procedure TSDOCurrencyField_Test.getDouble();
  8267. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8268. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8269. var
  8270. obj : ISDOField;
  8271. intVal : array[0..100] of Byte;
  8272. buffer, tmpBuffer, attributeBuffer : PByte;
  8273. valBuffer : PSDOCurrency;
  8274. begin
  8275. FillChar(intVal,SizeOf(intVal),#0);
  8276. buffer := @intVal;
  8277. tmpBuffer := buffer;
  8278. attributeBuffer := buffer;
  8279. Inc(tmpBuffer);
  8280. valBuffer := PSDOCurrency(tmpBuffer);
  8281. obj := Create_Field();
  8282. valBuffer^ := VAL_1;
  8283. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8284. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8285. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8286. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8287. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  8288. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8289. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8290. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8291. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8292. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  8293. valBuffer^ := VAL_2;
  8294. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8295. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8296. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8297. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8298. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  8299. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8300. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8301. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8302. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8303. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  8304. valBuffer^ := VAL_3;
  8305. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8306. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8307. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8308. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8309. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  8310. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8311. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8312. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8313. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8314. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  8315. FillChar(intVal,SizeOf(intVal),#0);
  8316. Inc(tmpBuffer);
  8317. Inc(attributeBuffer);
  8318. valBuffer := PSDOCurrency(tmpBuffer);
  8319. valBuffer^ := VAL_1;
  8320. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8321. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8322. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8323. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8324. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  8325. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8326. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8327. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8328. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8329. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  8330. valBuffer^ := VAL_2;
  8331. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8332. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8333. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8334. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8335. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  8336. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8337. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8338. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8339. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8340. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  8341. valBuffer^ := VAL_3;
  8342. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8343. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8344. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8345. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8346. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  8347. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8348. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8349. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8350. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8351. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  8352. end;
  8353. procedure TSDOCurrencyField_Test.setDouble();
  8354. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8355. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8356. var
  8357. obj : ISDOField;
  8358. intVal : array[0..100] of Byte;
  8359. buffer, tmpBuffer, attributeBuffer : PByte;
  8360. valBuffer : PSDOCurrency;
  8361. begin
  8362. FillChar(intVal,SizeOf(intVal),#0);
  8363. buffer := @intVal;
  8364. tmpBuffer := buffer;
  8365. attributeBuffer := buffer;
  8366. Inc(tmpBuffer);
  8367. valBuffer := PSDOCurrency(tmpBuffer);
  8368. obj := Create_Field();
  8369. obj.setDouble(buffer,F_OFFSET_0,VAL_1);
  8370. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8371. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8372. CheckEquals(VAL_1,valBuffer^);
  8373. obj.setDouble(buffer,F_OFFSET_0,VAL_2);
  8374. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8375. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8376. CheckEquals(VAL_2,valBuffer^);
  8377. obj.setDouble(buffer,F_OFFSET_0,VAL_3);
  8378. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8379. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8380. CheckEquals(VAL_3,valBuffer^);
  8381. FillChar(intVal,SizeOf(intVal),#0);
  8382. Inc(tmpBuffer);
  8383. Inc(attributeBuffer);
  8384. valBuffer := PSDOCurrency(tmpBuffer);
  8385. obj.setDouble(buffer,F_OFFSET_1,VAL_1);
  8386. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8387. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8388. CheckEquals(VAL_1,valBuffer^);
  8389. obj.setDouble(buffer,F_OFFSET_1,VAL_2);
  8390. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8391. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8392. CheckEquals(VAL_2,valBuffer^);
  8393. obj.setDouble(buffer,F_OFFSET_1,VAL_3);
  8394. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8395. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8396. CheckEquals(VAL_3,valBuffer^);
  8397. end;
  8398. procedure TSDOCurrencyField_Test.getFloat();
  8399. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8400. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8401. var
  8402. obj : ISDOField;
  8403. intVal : array[0..100] of Byte;
  8404. buffer, tmpBuffer, attributeBuffer : PByte;
  8405. valBuffer : PSDOCurrency;
  8406. begin
  8407. FillChar(intVal,SizeOf(intVal),#0);
  8408. buffer := @intVal;
  8409. tmpBuffer := buffer;
  8410. attributeBuffer := buffer;
  8411. Inc(tmpBuffer);
  8412. valBuffer := PSDOCurrency(tmpBuffer);
  8413. obj := Create_Field();
  8414. valBuffer^ := VAL_1;
  8415. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8416. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8417. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8418. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8419. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
  8420. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8421. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8422. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8423. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8424. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_0));
  8425. valBuffer^ := VAL_2;
  8426. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8427. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8428. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8429. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8430. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
  8431. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8432. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8433. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8434. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8435. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_0));
  8436. valBuffer^ := VAL_3;
  8437. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8438. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8439. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8440. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8441. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
  8442. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8443. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8444. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_0));
  8445. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8446. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_0));
  8447. FillChar(intVal,SizeOf(intVal),#0);
  8448. Inc(tmpBuffer);
  8449. Inc(attributeBuffer);
  8450. valBuffer := PSDOCurrency(tmpBuffer);
  8451. valBuffer^ := VAL_1;
  8452. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8453. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8454. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  8455. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8456. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
  8457. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8458. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8459. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  8460. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8461. CheckEquals(VAL_1,obj.getFloat(buffer,F_OFFSET_1));
  8462. valBuffer^ := VAL_2;
  8463. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8464. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8465. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  8466. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8467. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
  8468. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8469. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8470. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  8471. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8472. CheckEquals(VAL_2,obj.getFloat(buffer,F_OFFSET_1));
  8473. valBuffer^ := VAL_3;
  8474. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8475. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8476. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  8477. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8478. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
  8479. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8480. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8481. CheckEquals(0,obj.getFloat(buffer,F_OFFSET_1));
  8482. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8483. CheckEquals(VAL_3,obj.getFloat(buffer,F_OFFSET_1));
  8484. end;
  8485. procedure TSDOCurrencyField_Test.setFloat();
  8486. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8487. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8488. var
  8489. obj : ISDOField;
  8490. intVal : array[0..100] of Byte;
  8491. buffer, tmpBuffer, attributeBuffer : PByte;
  8492. valBuffer : PSDOCurrency;
  8493. begin
  8494. FillChar(intVal,SizeOf(intVal),#0);
  8495. buffer := @intVal;
  8496. tmpBuffer := buffer;
  8497. attributeBuffer := buffer;
  8498. Inc(tmpBuffer);
  8499. valBuffer := PSDOCurrency(tmpBuffer);
  8500. obj := Create_Field();
  8501. obj.setFloat(buffer,F_OFFSET_0,VAL_1);
  8502. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8503. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8504. CheckEquals(VAL_1,valBuffer^);
  8505. obj.setFloat(buffer,F_OFFSET_0,VAL_2);
  8506. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8507. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8508. CheckEquals(VAL_2,valBuffer^);
  8509. obj.setFloat(buffer,F_OFFSET_0,VAL_3);
  8510. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8511. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8512. CheckEquals(VAL_3,valBuffer^);
  8513. FillChar(intVal,SizeOf(intVal),#0);
  8514. Inc(tmpBuffer);
  8515. Inc(attributeBuffer);
  8516. valBuffer := PSDOCurrency(tmpBuffer);
  8517. obj.setFloat(buffer,F_OFFSET_1,VAL_1);
  8518. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8519. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8520. CheckEquals(VAL_1,valBuffer^);
  8521. obj.setFloat(buffer,F_OFFSET_1,VAL_2);
  8522. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8523. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8524. CheckEquals(VAL_2,valBuffer^);
  8525. obj.setFloat(buffer,F_OFFSET_1,VAL_3);
  8526. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8527. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8528. CheckEquals(VAL_3,valBuffer^);
  8529. end;
  8530. procedure TSDOCurrencyField_Test.getString();
  8531. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8532. VAL_1 = 12345.6789; VAL_2 = -987654.3211; VAL_3 = 0;
  8533. var
  8534. obj : ISDOField;
  8535. intVal : array[0..100] of Byte;
  8536. buffer, tmpBuffer, attributeBuffer : PByte;
  8537. valBuffer : PSDOCurrency;
  8538. begin
  8539. FillChar(intVal,SizeOf(intVal),#0);
  8540. buffer := @intVal;
  8541. tmpBuffer := buffer;
  8542. attributeBuffer := buffer;
  8543. Inc(tmpBuffer);
  8544. valBuffer := PSDOCurrency(tmpBuffer);
  8545. obj := Create_Field();
  8546. valBuffer^ := VAL_1;
  8547. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8548. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8549. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  8550. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8551. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8552. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  8553. valBuffer^ := VAL_2;
  8554. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8555. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8556. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  8557. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8558. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8559. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  8560. valBuffer^ := VAL_3;
  8561. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8562. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8563. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  8564. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8565. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8566. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  8567. FillChar(intVal,SizeOf(intVal),#0);
  8568. Inc(tmpBuffer);
  8569. Inc(attributeBuffer);
  8570. valBuffer := PSDOCurrency(tmpBuffer);
  8571. valBuffer^ := VAL_1;
  8572. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8573. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8574. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  8575. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8576. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8577. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  8578. valBuffer^ := VAL_2;
  8579. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8580. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8581. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  8582. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8583. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8584. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  8585. valBuffer^ := VAL_3;
  8586. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8587. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8588. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  8589. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8590. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8591. CheckEquals(TSDOConvertHelper.CurrencyToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  8592. end;
  8593. procedure TSDOCurrencyField_Test.setString();
  8594. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8595. VAL_1 : TSDOCurrency = 12345; VAL_2 : TSDOCurrency = -98765; VAL_3 : TSDOCurrency = 0;
  8596. var
  8597. obj : ISDOField;
  8598. intVal : array[0..100] of Byte;
  8599. buffer, tmpBuffer, attributeBuffer : PByte;
  8600. valBuffer : PSDOCurrency;
  8601. begin
  8602. FillChar(intVal,SizeOf(intVal),#0);
  8603. buffer := @intVal;
  8604. tmpBuffer := buffer;
  8605. attributeBuffer := buffer;
  8606. Inc(tmpBuffer);
  8607. valBuffer := PSDOCurrency(tmpBuffer);
  8608. obj := Create_Field();
  8609. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.CurrencyToString(VAL_1));
  8610. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8611. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8612. CheckEquals(VAL_1,valBuffer^);
  8613. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.CurrencyToString(VAL_2));
  8614. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8615. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8616. CheckEquals(VAL_2,valBuffer^);
  8617. FillChar(intVal,SizeOf(intVal),#0);
  8618. Inc(tmpBuffer);
  8619. Inc(attributeBuffer);
  8620. valBuffer := PSDOCurrency(tmpBuffer);
  8621. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.CurrencyToString(VAL_1));
  8622. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8623. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8624. CheckEquals(VAL_1,valBuffer^);
  8625. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.CurrencyToString(VAL_2));
  8626. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8627. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8628. CheckEquals(VAL_2,valBuffer^);
  8629. end;
  8630. {$ENDIF HAS_SDO_CURRENCY}
  8631. {$IFDEF HAS_SDO_DOUBLE}
  8632. function TSDODoubleField_Test.Create_Field() : ISDOField;
  8633. begin
  8634. Result := TSDODoubleField.Create() as ISDOField;
  8635. end;
  8636. procedure TSDODoubleField_Test.getCurrency();
  8637. begin
  8638. end;
  8639. procedure TSDODoubleField_Test.setCurrency();
  8640. begin
  8641. end;
  8642. procedure TSDODoubleField_Test.getDouble();
  8643. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8644. VAL_1 : TSDODouble = 123458679123.1234; VAL_2 : TSDODouble = -98765532166547.9876; VAL_3 : TSDODouble = 0;
  8645. var
  8646. obj : ISDOField;
  8647. intVal : array[0..100] of Byte;
  8648. buffer, tmpBuffer, attributeBuffer : PByte;
  8649. valBuffer : PSDODouble;
  8650. begin
  8651. FillChar(intVal,SizeOf(intVal),#0);
  8652. buffer := @intVal;
  8653. tmpBuffer := buffer;
  8654. attributeBuffer := buffer;
  8655. Inc(tmpBuffer);
  8656. valBuffer := PSDODouble(tmpBuffer);
  8657. obj := Create_Field();
  8658. valBuffer^ := VAL_1;
  8659. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8660. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8661. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8662. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8663. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  8664. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8665. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8666. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8667. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8668. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_0));
  8669. valBuffer^ := VAL_2;
  8670. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8671. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8672. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8673. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8674. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  8675. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8676. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8677. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8678. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8679. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_0));
  8680. valBuffer^ := VAL_3;
  8681. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8682. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8683. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8684. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8685. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  8686. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8687. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8688. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_0));
  8689. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8690. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_0));
  8691. FillChar(intVal,SizeOf(intVal),#0);
  8692. Inc(tmpBuffer);
  8693. Inc(attributeBuffer);
  8694. valBuffer := PSDODouble(tmpBuffer);
  8695. valBuffer^ := VAL_1;
  8696. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8697. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8698. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8699. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8700. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  8701. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8702. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8703. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8704. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8705. CheckEquals(VAL_1,obj.getDouble(buffer,F_OFFSET_1));
  8706. valBuffer^ := VAL_2;
  8707. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8708. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8709. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8710. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8711. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  8712. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8713. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8714. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8715. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8716. CheckEquals(VAL_2,obj.getDouble(buffer,F_OFFSET_1));
  8717. valBuffer^ := VAL_3;
  8718. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8719. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8720. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8721. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8722. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  8723. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8724. SetBit(attributeBuffer^,BIT_ORDER_NULL,True);
  8725. CheckEquals(0,obj.getDouble(buffer,F_OFFSET_1));
  8726. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8727. CheckEquals(VAL_3,obj.getDouble(buffer,F_OFFSET_1));
  8728. end;
  8729. procedure TSDODoubleField_Test.setDouble();
  8730. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8731. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -98765; VAL_3 : TSDODouble = 0;
  8732. var
  8733. obj : ISDOField;
  8734. intVal : array[0..100] of Byte;
  8735. buffer, tmpBuffer, attributeBuffer : PByte;
  8736. valBuffer : PSDODouble;
  8737. begin
  8738. FillChar(intVal,SizeOf(intVal),#0);
  8739. buffer := @intVal;
  8740. tmpBuffer := buffer;
  8741. attributeBuffer := buffer;
  8742. Inc(tmpBuffer);
  8743. valBuffer := PSDODouble(tmpBuffer);
  8744. obj := Create_Field();
  8745. obj.setDouble(buffer,F_OFFSET_0,VAL_1);
  8746. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8747. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8748. CheckEquals(VAL_1,valBuffer^);
  8749. obj.setDouble(buffer,F_OFFSET_0,VAL_2);
  8750. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8751. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8752. CheckEquals(VAL_2,valBuffer^);
  8753. obj.setDouble(buffer,F_OFFSET_0,VAL_3);
  8754. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8755. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8756. CheckEquals(VAL_3,valBuffer^);
  8757. FillChar(intVal,SizeOf(intVal),#0);
  8758. Inc(tmpBuffer);
  8759. Inc(attributeBuffer);
  8760. valBuffer := PSDODouble(tmpBuffer);
  8761. obj.setDouble(buffer,F_OFFSET_1,VAL_1);
  8762. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8763. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8764. CheckEquals(VAL_1,valBuffer^);
  8765. obj.setDouble(buffer,F_OFFSET_1,VAL_2);
  8766. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8767. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8768. CheckEquals(VAL_2,valBuffer^);
  8769. obj.setDouble(buffer,F_OFFSET_1,VAL_3);
  8770. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8771. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8772. CheckEquals(VAL_3,valBuffer^);
  8773. end;
  8774. procedure TSDODoubleField_Test.getFloat();
  8775. begin
  8776. end;
  8777. procedure TSDODoubleField_Test.setFloat();
  8778. begin
  8779. end;
  8780. procedure TSDODoubleField_Test.getString();
  8781. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8782. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -987654; VAL_3 : TSDODouble = 0;
  8783. var
  8784. obj : ISDOField;
  8785. intVal : array[0..100] of Byte;
  8786. buffer, tmpBuffer, attributeBuffer : PByte;
  8787. valBuffer : PSDODouble;
  8788. begin
  8789. FillChar(intVal,SizeOf(intVal),#0);
  8790. buffer := @intVal;
  8791. tmpBuffer := buffer;
  8792. attributeBuffer := buffer;
  8793. Inc(tmpBuffer);
  8794. valBuffer := PSDODouble(tmpBuffer);
  8795. obj := Create_Field();
  8796. valBuffer^ := VAL_1;
  8797. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8798. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8799. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  8800. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8801. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8802. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  8803. valBuffer^ := VAL_2;
  8804. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8805. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8806. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  8807. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8808. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8809. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  8810. valBuffer^ := VAL_3;
  8811. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8812. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8813. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  8814. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8815. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8816. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  8817. FillChar(intVal,SizeOf(intVal),#0);
  8818. Inc(tmpBuffer);
  8819. Inc(attributeBuffer);
  8820. valBuffer := PSDODouble(tmpBuffer);
  8821. valBuffer^ := VAL_1;
  8822. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8823. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8824. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  8825. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8826. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8827. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  8828. valBuffer^ := VAL_2;
  8829. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8830. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8831. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  8832. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8833. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8834. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  8835. valBuffer^ := VAL_3;
  8836. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8837. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8838. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  8839. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8840. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8841. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  8842. end;
  8843. procedure TSDODoubleField_Test.setString();
  8844. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8845. VAL_1 : TSDODouble = 12345; VAL_2 : TSDODouble = -98765; VAL_3 : TSDODouble = 0;
  8846. var
  8847. obj : ISDOField;
  8848. intVal : array[0..100] of Byte;
  8849. buffer, tmpBuffer, attributeBuffer : PByte;
  8850. valBuffer : PSDODouble;
  8851. begin
  8852. FillChar(intVal,SizeOf(intVal),#0);
  8853. buffer := @intVal;
  8854. tmpBuffer := buffer;
  8855. attributeBuffer := buffer;
  8856. Inc(tmpBuffer);
  8857. valBuffer := PSDODouble(tmpBuffer);
  8858. obj := Create_Field();
  8859. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.FloatToString(VAL_1));
  8860. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8861. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8862. CheckEquals(VAL_1,valBuffer^);
  8863. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.FloatToString(VAL_2));
  8864. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8865. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8866. CheckEquals(VAL_2,valBuffer^);
  8867. FillChar(intVal,SizeOf(intVal),#0);
  8868. Inc(tmpBuffer);
  8869. Inc(attributeBuffer);
  8870. valBuffer := PSDODouble(tmpBuffer);
  8871. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.FloatToString(VAL_1));
  8872. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8873. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8874. CheckEquals(VAL_1,valBuffer^);
  8875. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.FloatToString(VAL_2));
  8876. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8877. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8878. CheckEquals(VAL_2,valBuffer^);
  8879. end;
  8880. {$ENDIF HAS_SDO_DOUBLE}
  8881. {$IFDEF HAS_SDO_FLOAT}
  8882. function TSDOFloatField_Test.Create_Field() : ISDOField;
  8883. begin
  8884. Result := TSDOFloatField.Create() as ISDOField;
  8885. end;
  8886. procedure TSDOFloatField_Test.getCurrency();
  8887. begin
  8888. end;
  8889. procedure TSDOFloatField_Test.setCurrency();
  8890. begin
  8891. end;
  8892. procedure TSDOFloatField_Test.getDouble();
  8893. begin
  8894. end;
  8895. procedure TSDOFloatField_Test.setDouble();
  8896. begin
  8897. end;
  8898. procedure TSDOFloatField_Test.getFloat();
  8899. begin
  8900. end;
  8901. procedure TSDOFloatField_Test.setFloat();
  8902. begin
  8903. end;
  8904. procedure TSDOFloatField_Test.getString();
  8905. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8906. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -987654; VAL_3 : TSDOFloat = 0;
  8907. var
  8908. obj : ISDOField;
  8909. intVal : array[0..100] of Byte;
  8910. buffer, tmpBuffer, attributeBuffer : PByte;
  8911. valBuffer : PSDOFloat;
  8912. begin
  8913. FillChar(intVal,SizeOf(intVal),#0);
  8914. buffer := @intVal;
  8915. tmpBuffer := buffer;
  8916. attributeBuffer := buffer;
  8917. Inc(tmpBuffer);
  8918. valBuffer := PSDOFloat(tmpBuffer);
  8919. obj := Create_Field();
  8920. valBuffer^ := VAL_1;
  8921. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8922. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8923. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  8924. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8925. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8926. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_0));
  8927. valBuffer^ := VAL_2;
  8928. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8929. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8930. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  8931. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8932. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8933. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
  8934. valBuffer^ := VAL_3;
  8935. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8936. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8937. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  8938. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8939. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8940. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_0));
  8941. FillChar(intVal,SizeOf(intVal),#0);
  8942. Inc(tmpBuffer);
  8943. Inc(attributeBuffer);
  8944. valBuffer := PSDOFloat(tmpBuffer);
  8945. valBuffer^ := VAL_1;
  8946. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8947. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8948. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  8949. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8950. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8951. CheckEquals(TSDOConvertHelper.FloatToString(VAL_1),obj.getString(buffer,F_OFFSET_1));
  8952. valBuffer^ := VAL_2;
  8953. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8954. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8955. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  8956. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8957. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8958. CheckEquals(TSDOConvertHelper.FloatToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
  8959. valBuffer^ := VAL_3;
  8960. SetBit(attributeBuffer^,BIT_ORDER_SET,True);
  8961. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8962. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  8963. SetBit(attributeBuffer^,BIT_ORDER_SET,False);
  8964. SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
  8965. CheckEquals(TSDOConvertHelper.FloatToString(VAL_3),obj.getString(buffer,F_OFFSET_1));
  8966. end;
  8967. procedure TSDOFloatField_Test.setString();
  8968. const F_OFFSET_0 = 0; F_OFFSET_1 = 1;
  8969. VAL_1 : TSDOFloat = 12345; VAL_2 : TSDOFloat = -98765; VAL_3 : TSDOFloat = 0;
  8970. var
  8971. obj : ISDOField;
  8972. intVal : array[0..100] of Byte;
  8973. buffer, tmpBuffer, attributeBuffer : PByte;
  8974. valBuffer : PSDOFloat;
  8975. begin
  8976. FillChar(intVal,SizeOf(intVal),#0);
  8977. buffer := @intVal;
  8978. tmpBuffer := buffer;
  8979. attributeBuffer := buffer;
  8980. Inc(tmpBuffer);
  8981. valBuffer := PSDOFloat(tmpBuffer);
  8982. obj := Create_Field();
  8983. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.FloatToString(VAL_1));
  8984. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8985. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8986. CheckEquals(VAL_1,valBuffer^);
  8987. obj.setString(buffer,F_OFFSET_0,TSDOConvertHelper.FloatToString(VAL_2));
  8988. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8989. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8990. CheckEquals(VAL_2,valBuffer^);
  8991. FillChar(intVal,SizeOf(intVal),#0);
  8992. Inc(tmpBuffer);
  8993. Inc(attributeBuffer);
  8994. valBuffer := PSDOFloat(tmpBuffer);
  8995. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.FloatToString(VAL_1));
  8996. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  8997. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  8998. CheckEquals(VAL_1,valBuffer^);
  8999. obj.setString(buffer,F_OFFSET_1,TSDOConvertHelper.FloatToString(VAL_2));
  9000. CheckEquals(True,IsBitON(attributeBuffer^,BIT_ORDER_SET));
  9001. CheckEquals(False,IsBitON(attributeBuffer^,BIT_ORDER_NULL));
  9002. CheckEquals(VAL_2,valBuffer^);
  9003. end;
  9004. {$ENDIF HAS_SDO_FLOAT}
  9005. initialization
  9006. RegisterTest(TSDOBooleanField_Test.GetTestSuitePath(),TSDOBooleanField_Test.Suite);
  9007. RegisterTest(TSDOIntegerField_Test.GetTestSuitePath(),TSDOIntegerField_Test.Suite);
  9008. {$IFDEF HAS_SDO_LONG}
  9009. RegisterTest(TSDOLongField_Test.GetTestSuitePath(),TSDOLongField_Test.Suite);
  9010. {$ENDIF HAS_SDO_LONG}
  9011. {$IFDEF HAS_SDO_SHORT}
  9012. RegisterTest(TSDOShortField_Test.GetTestSuitePath(),TSDOShortField_Test.Suite);
  9013. {$ENDIF HAS_SDO_SHORT}
  9014. RegisterTest(TSDOStringField_Test.GetTestSuitePath(),TSDOStringField_Test.Suite);
  9015. RegisterTest(TSDOBaseDataObject_Test.GetTestSuitePath(),TSDOBaseDataObject_Test.Suite);
  9016. RegisterTest(TSDOChangeSummaryField_Test.GetTestSuitePath(),TSDOChangeSummaryField_Test.Suite);
  9017. RegisterTest(TSDOByteField_Test.GetTestSuitePath(),TSDOByteField_Test.Suite);
  9018. RegisterTest(TSDODateField_Test.GetTestSuitePath(),TSDODateField_Test.Suite);
  9019. {$IFDEF HAS_SDO_BYTES}
  9020. RegisterTest(TSDOBytesField_Test.GetTestSuitePath(),TSDOBytesField_Test.Suite);
  9021. {$ENDIF HAS_SDO_BYTES}
  9022. {$IFDEF HAS_SDO_CHAR}
  9023. RegisterTest(TSDOCharField_Test.GetTestSuitePath(),TSDOCharField_Test.Suite);
  9024. {$ENDIF HAS_SDO_CHAR}
  9025. {$IFDEF HAS_SDO_CURRENCY}
  9026. RegisterTest(TSDOCurrencyField_Test.GetTestSuitePath(),TSDOCurrencyField_Test.Suite);
  9027. {$ENDIF HAS_SDO_CURRENCY}
  9028. {$IFDEF HAS_SDO_DOUBLE}
  9029. RegisterTest(TSDODoubleField_Test.GetTestSuitePath(),TSDODoubleField_Test.Suite);
  9030. {$ENDIF HAS_SDO_DOUBLE}
  9031. {$IFDEF HAS_SDO_FLOAT}
  9032. RegisterTest(TSDOFloatField_Test.GetTestSuitePath(),TSDOFloatField_Test.Suite);
  9033. {$ENDIF HAS_SDO_FLOAT}
  9034. end.