1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093 |
- {
- This file is part of the Free Component Library
- JSON FPCUNit test for data structures
- Copyright (c) 2007 by Michael Van Canneyt [email protected]
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$mode objfpc}
- {$h+}
- unit testjsondata;
- interface
- uses
- Classes, SysUtils, fpcunit, testutils, testregistry, fpjson;
- type
- TMyNull = Class(TJSONNull);
- TMyInteger = Class(TJSONIntegerNumber);
- TMyInt64 = Class(TJSONInt64Number);
- TMyQWord = Class(TJSONQWordNumber);
- TMyFloat = Class(TJSONFloatNumber);
- TMyString = Class(TJSONString);
- TMyBoolean = Class(TJSONBoolean);
- TMyArray = Class(TJSONArray);
- TMyObject = Class(TJSONObject);
- { TTestJSONString }
- TTestJSONString = Class(TTestCase)
- Private
- Procedure TestTo(Const Src,Dest : String);
- Procedure TestFrom(Const Src,Dest : String);
- Published
- Procedure TestJSONStringToString;
- Procedure TestStringToJSONString;
- end;
-
- { TTestJSON }
-
- TTestJSON = Class(TTestCase)
- private
- Protected
- procedure SetDefaultInstanceTypes;
- procedure SetMyInstanceTypes;
- Procedure SetUp; override;
- Procedure TestItemCount(J : TJSONData;Expected : Integer);
- Procedure TestJSONType(J : TJSONData;Expected : TJSONType);
- Procedure TestJSON(J : TJSONData;Expected : String);
- Procedure TestIsNull(J : TJSONData;Expected : Boolean);
- Procedure TestAsBoolean(J : TJSONData;Expected : Boolean; ExpectError : boolean = False);
- Procedure TestAsInteger(J : TJSONData; Expected : Integer; ExpectError : boolean = False);
- Procedure TestAsInt64(J : TJSONData; Expected : Int64; ExpectError : boolean = False);
- Procedure TestAsQWord(J : TJSONData; Expected : QWord; ExpectError : boolean = False);
- Procedure TestAsString(J : TJSONData; Expected : String; ExpectError : boolean = False);
- Procedure TestAsFloat(J : TJSONData; Expected : TJSONFloat; ExpectError : boolean = False);
- end;
-
- { TTestNull }
- TTestNull = class(TTestJSON)
- published
- procedure TestNull;
- Procedure TestClone;
- Procedure TestMyClone;
- Procedure TestFormat;
- end;
-
- { TTestBoolean }
- TTestBoolean = class(TTestJSON)
- published
- procedure TestTrue;
- procedure TestFalse;
- Procedure TestClone;
- Procedure TestMyClone;
- Procedure TestFormat;
- end;
-
- { TTestInteger }
- TTestInteger = class(TTestJSON)
- Private
- Procedure DoTest(I : Integer);
- published
- procedure TestPositive;
- procedure TestNegative;
- procedure TestZero;
- Procedure TestClone;
- Procedure TestMyClone;
- Procedure TestFormat;
- end;
- { TTestInt64 }
- TTestInt64 = class(TTestJSON)
- Private
- Procedure DoTest(I : Int64);
- published
- procedure TestPositive;
- procedure TestNegative;
- procedure TestZero;
- Procedure TestClone;
- Procedure TestMyClone;
- Procedure TestFormat;
- end;
- { TTestQword }
- TTestQword = class(TTestJSON)
- Private
- Procedure DoTest(Q : QWord);
- published
- procedure TestPositive;
- procedure TestZero;
- Procedure TestClone;
- Procedure TestMyClone;
- Procedure TestFormat;
- end;
- { TTestFloat }
- TTestFloat = class(TTestJSON)
- Private
- Procedure DoTest(F : TJSONFloat);
- published
- procedure TestPositive;
- procedure TestNegative;
- procedure TestZero;
- Procedure TestClone;
- Procedure TestMyClone;
- Procedure TestFormat;
- end;
- { TTestString }
- TTestString = class(TTestJSON)
- private
- procedure DoTestFloat(F: TJSOnFloat; S: String; OK: Boolean);
- published
- procedure TestString;
- procedure TestInteger;
- procedure TestNegativeInteger;
- procedure TestFloat;
- procedure TestNegativeFloat;
- Procedure TestBooleanTrue;
- Procedure TestBooleanFalse;
- Procedure TestClone;
- Procedure TestMyClone;
- Procedure TestFormat;
- end;
-
- { TTestArray }
- TTestArray = class(TTestJSON)
- private
- procedure TestAddBoolean(B : Boolean);
- procedure TestInsertBoolean(B : Boolean);
- published
- Procedure TestCreate;
- Procedure TestCreateString;
- Procedure TestCreatePchar;
- procedure TestCreateStrings;
- procedure TestCreateStringsCompressed;
- procedure TestCreateInteger;
- procedure TestCreateInt64;
- procedure TestCreateFloat;
- procedure TestCreateBoolean;
- procedure TestCreateObject;
- procedure TestCreateJSONString;
- procedure TestCreateJSONObject;
- procedure TestCreateNilPointer;
- procedure TestCreatePointer;
- procedure TestAddInteger;
- procedure TestAddInt64;
- procedure TestAddFloat;
- procedure TestAddBooleanTrue;
- procedure TestAddBooleanFalse;
- procedure TestAddString;
- procedure TestAddNull;
- procedure TestAddObject;
- procedure TestAddArray;
- procedure TestInsertInteger;
- procedure TestInsertInt64;
- procedure TestInsertFloat;
- procedure TestInsertBooleanTrue;
- procedure TestInsertBooleanFalse;
- procedure TestInsertString;
- procedure TestInsertNull;
- procedure TestInsertObject;
- procedure TestInsertArray;
- procedure TestMove;
- procedure TestExchange;
- procedure TestDelete;
- procedure TestRemove;
- Procedure TestClone;
- Procedure TestMyClone;
- Procedure TestFormat;
- end;
-
- { TTestObject }
- TTestObject = class(TTestJSON)
- private
- procedure TestAddBoolean(B : Boolean);
- Procedure TestAccessError;
- published
- Procedure TestCreate;
- Procedure TestCreateString;
- Procedure TestCreateStringUnquoted;
- Procedure TestCreatePchar;
- Procedure TestCreatePcharUnquoted;
- procedure TestCreateStrings;
- procedure TestCreateStringsCompressed;
- procedure TestCreateStringsCompressedUnquoted;
- procedure TestCreateInteger;
- procedure TestCreateIntegerUnquoted;
- procedure TestCreateInt64;
- procedure TestCreateInt64Unquoted;
- procedure TestCreateFloat;
- procedure TestCreateFloatUnquoted;
- procedure TestCreateBoolean;
- procedure TestCreateBooleanUnquoted;
- procedure TestCreateObject;
- procedure TestCreateJSONString;
- procedure TestCreateJSONStringUnquoted;
- procedure TestCreateJSONObject;
- procedure TestCreateJSONObjectUnquoted;
- procedure TestCreateNilPointer;
- procedure TestCreatePointer;
- procedure TestAddInteger;
- procedure TestAddInt64;
- procedure TestAddFloat;
- procedure TestAddBooleanTrue;
- procedure TestAddBooleanFalse;
- procedure TestAddString;
- procedure TestAddNull;
- procedure TestAddObject;
- procedure TestAddArray;
- procedure TestDelete;
- procedure TestRemove;
- procedure TestClone;
- procedure TestMyClone;
- procedure TestExtract;
- Procedure TestNonExistingAccessError;
- Procedure TestFormat;
- Procedure TestFind;
- end;
- { TTestJSONPath }
- TTestJSONPath = class(TTestJSON)
- private
- FData: TJSONData;
- Protected
- Procedure TearDown; override;
- Property Data : TJSONData read FData Write FData;
- Published
- Procedure TestNullEmpty;
- Procedure TestNullGet;
- Procedure TestNullNonExisting;
- Procedure TestNullNotEmpty;
- Procedure TestBooleanEmpty;
- Procedure TestBooleanNotEmpty;
- Procedure TestIntegerEmpty;
- Procedure TestIntegerNotEmpty;
- Procedure TestInt64Empty;
- Procedure TestInt64NotEmpty;
- Procedure TestFloatEmpty;
- Procedure TestFloatNotEmpty;
- Procedure TestStringEmpty;
- Procedure TestStringNotEmpty;
- Procedure TestArrayEmpty;
- Procedure TestArrayNotIndex;
- Procedure TestArrayIncompleteIndex;
- Procedure TestArrayNonNumericalIndex;
- Procedure TestArrayOutOfRangeIndex;
- Procedure TestArrayCorrectIndex;
- Procedure TestArrayRecursiveArray;
- Procedure TestArrayRecursiveObject;
- Procedure TestObjectEmpty;
- Procedure TestObjectDots;
- Procedure TestObjectExisting;
- Procedure TestObjectNonExisting;
- Procedure TestObjectTrailingDot;
- Procedure TestObjectRecursiveArray;
- Procedure TestObjectRecursiveObject;
- Procedure TestDeepRecursive;
- end;
- { TTestFactory }
- TTestFactory = class(TTestJSON)
- Private
- FType : TJSONInstanceType;
- FClass : TJSONDataClass;
- FData: TJSONData;
- Protected
- Procedure DoSet;
- Procedure TearDown; override;
- Procedure AssertElement0(AClass : TJSONDataClass);
- Procedure AssertElementA(AClass : TJSONDataClass);
- Property Data : TJSONData read FData Write FData;
- Published
- Procedure TestSet;
- Procedure TestSetInvalid;
- Procedure CreateNull;
- Procedure CreateInteger;
- Procedure CreateInt64;
- Procedure CreateFloat;
- Procedure CreateBoolean;
- Procedure CreateString;
- Procedure CreateArray;
- Procedure CreateObject;
- Procedure ArrayAddNull;
- Procedure ArrayAddInteger;
- Procedure ArrayAddInt64;
- Procedure ArrayAddFloat;
- Procedure ArrayAddBoolean;
- Procedure ArrayAddString;
- Procedure ArrayCreateNull;
- Procedure ArrayCreateInteger;
- Procedure ArrayCreateInt64;
- Procedure ArrayCreateFloat;
- Procedure ArrayCreateBoolean;
- Procedure ArrayCreateString;
- Procedure ObjectAddNull;
- Procedure ObjectAddInteger;
- Procedure ObjectAddInt64;
- Procedure ObjectAddFloat;
- Procedure ObjectAddBoolean;
- Procedure ObjectAddString;
- Procedure ObjectCreateNull;
- Procedure ObjectCreateInteger;
- Procedure ObjectCreateInt64;
- Procedure ObjectCreateFloat;
- Procedure ObjectCreateBoolean;
- Procedure ObjectCreateString;
- end;
- { TTestIterator }
- TTestIterator = class(TTestJSON)
- private
- FData: TJSONData;
- Protected
- Procedure TearDown; override;
- Procedure TestSingle;
- Procedure TestLoop(ACount : Integer);
- Property Data : TJSONData Read FData Write FData;
- Published
- Procedure TestNull;
- Procedure TestInteger;
- Procedure TestInt64;
- Procedure TestFloat;
- Procedure TestBoolean;
- Procedure TestString;
- Procedure TestArray;
- Procedure TestObject;
- end;
- implementation
- { TTestIterator }
- procedure TTestIterator.TearDown;
- begin
- FreeAndNil(FData);
- inherited TearDown;
- end;
- procedure TTestIterator.TestSingle;
- Var
- F : TJSONEnum;
- C : Integer;
- begin
- C:=0;
- For F in Data do
- begin
- Inc(C);
- If C>1 then
- Fail(Data.ClassName+' loops more than once');
- AssertEquals(Data.ClassName+' has empty key','',F.Key);
- AssertEquals(Data.ClassName+' has empty numerical key',0,F.KeyNum);
- AssertSame(Data.ClassName+' returns data',Data,F.Value);
- end;
- If C<1 then
- Fail(Data.ClassName+' Loops not even once');
- end;
- procedure TTestIterator.TestLoop(ACount: Integer);
- Var
- F : TJSONEnum;
- C : Integer;
- begin
- C:=0;
- For F in Data do
- begin
- AssertEquals(Data.ClassName+' has correct string key',IntToStr(C),F.Key);
- AssertEquals(Data.ClassName+' has correct numerical key',C,F.KeyNum);
- AssertSame(Data.ClassName+' returns correct data',Data.Items[C],F.Value);
- Inc(C);
- end;
- AssertEquals(Data.ClassName+' correct loop count',ACount,C);
- end;
- procedure TTestIterator.TestNull;
- begin
- Data:=TJSONNull.Create;
- TestSingle;
- end;
- procedure TTestIterator.TestInteger;
- begin
- Data:=TJSONIntegerNumber.Create(1);
- TestSingle;
- end;
- procedure TTestIterator.TestInt64;
- begin
- Data:=TJSONInt64Number.Create(1);
- TestSingle;
- end;
- procedure TTestIterator.TestFloat;
- begin
- Data:=TJSONFloatNumber.Create(1.2);
- TestSingle;
- end;
- procedure TTestIterator.TestBoolean;
- begin
- Data:=TJSONBoolean.Create(True);
- TestSingle;
- end;
- procedure TTestIterator.TestString;
- begin
- Data:=TJSONString.Create('Data');
- TestSingle;
- end;
- procedure TTestIterator.TestArray;
- begin
- Data:=TJSONArray.Create([1,2,3]);
- TestLoop(3);
- end;
- procedure TTestIterator.TestObject;
- begin
- Data:=TJSONObject.Create(['0',1,'1',2,'2',3]);
- TestLoop(3);
- end;
- { TTestFactory }
- procedure TTestFactory.DoSet;
- begin
- SetJSONInstanceType(FType,FClass);
- end;
- procedure TTestFactory.TearDown;
- begin
- FreeAndNil(FData);
- inherited TearDown;
- end;
- procedure TTestFactory.AssertElement0(AClass: TJSONDataClass);
- begin
- AssertEquals('Correct class',TMyArray,Data.ClassType);
- AssertEquals('Have 1 element',1,Data.Count);
- AssertEquals('Correct class',AClass,(Data as TJSONArray)[0].ClassType);
- end;
- procedure TTestFactory.AssertElementA(AClass: TJSONDataClass);
- begin
- AssertEquals('Correct class',TMyObject,Data.ClassType);
- AssertEquals('Have element a',0,TMyObject(Data).IndexOfName('a'));
- AssertEquals('Correct class',AClass,(Data as TJSONObject).Elements['a'].ClassType);
- end;
- procedure TTestFactory.TestSet;
- begin
- SetMyInstanceTypes;
- AssertEquals('Correct type for unknown',TJSONData,GetJSONInstanceType(jitUnknown));
- AssertEquals('Correct type for integer',TMyInteger,GetJSONInstanceType(jitNumberInteger));
- AssertEquals('Correct type for int64',TMyInt64,GetJSONInstanceType(jitNumberInt64));
- AssertEquals('Correct type for float',TMyFloat,GetJSONInstanceType(jitNumberFloat));
- AssertEquals('Correct type for boolean',TMyBoolean,GetJSONInstanceType(jitBoolean));
- AssertEquals('Correct type for null',TMyNull,GetJSONInstanceType(jitNUll));
- AssertEquals('Correct type for String',TMyString,GetJSONInstanceType(jitString));
- AssertEquals('Correct type for Array',TMyArray,GetJSONInstanceType(jitArray));
- AssertEquals('Correct type for Object',TMyObject,GetJSONInstanceType(jitObject));
- end;
- procedure TTestFactory.TestSetInvalid;
- Const
- MyJSONInstanceTypes :
- Array [TJSONInstanceType] of TJSONDataClass = (TJSONData, TMyInteger,
- TMyInt64,TMyQWord,TMyFloat, TMyString, TMyBoolean, TMyNull, TMyArray,
- TMyObject);
- Var
- Ti : TJSONInstanceType;
- begin
- For ti:=Succ(Low(TJSONInstanceType)) to High(TJSONInstanceType) do
- begin
- FType:=Ti;
- FClass:=MyJSONInstanceTypes[Pred(ti)];
- AssertException('Set '+FClass.ClassName,EJSON,@DoSet);
- end;
- FType:=jitString;
- FClass:=Nil;
- AssertException('Set Nil',EJSON,@DoSet);
- end;
- procedure TTestFactory.CreateNull;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSON;
- AssertEquals('Correct class',TMyNull,Data.ClassType);
- end;
- procedure TTestFactory.CreateInteger;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSON(1);
- AssertEquals('Correct class',TMyInteger,Data.ClassType);
- end;
- procedure TTestFactory.CreateInt64;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSON(Int64(1));
- AssertEquals('Correct class',TMyInt64,Data.ClassType);
- end;
- procedure TTestFactory.CreateFloat;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSON(1.2);
- AssertEquals('Correct class',TMyFloat,Data.ClassType);
- end;
- procedure TTestFactory.CreateBoolean;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSON(True);
- AssertEquals('Correct class',TMyBoolean,Data.ClassType);
- end;
- procedure TTestFactory.CreateString;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSON('True');
- AssertEquals('Correct class',TMyString,Data.ClassType);
- end;
- procedure TTestFactory.CreateArray;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray(['True']);
- AssertEquals('Correct class',TMyArray,Data.ClassType);
- end;
- procedure TTestFactory.CreateObject;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject(['a','True']);
- AssertEquals('Correct class',TMyObject,Data.ClassType);
- end;
- procedure TTestFactory.ArrayAddNull;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([]);
- TJSONArray(Data).Add();
- AssertElement0(TMyNull);
- end;
- procedure TTestFactory.ArrayAddInteger;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([]);
- TJSONArray(Data).Add(1);
- AssertElement0(TMyInteger);
- end;
- procedure TTestFactory.ArrayAddInt64;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([]);
- TJSONArray(Data).Add(Int64(1));
- AssertElement0(TMyInt64);
- end;
- procedure TTestFactory.ArrayAddFloat;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([]);
- TJSONArray(Data).Add(1.2);
- AssertElement0(TMyFloat);
- end;
- procedure TTestFactory.ArrayAddBoolean;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([]);
- TJSONArray(Data).Add(True);
- AssertElement0(TMyBoolean);
- end;
- procedure TTestFactory.ArrayAddString;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([]);
- TJSONArray(Data).Add('True');
- AssertElement0(TMyString);
- end;
- procedure TTestFactory.ArrayCreateNull;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([Nil]);
- AssertElement0(TMyNull);
- end;
- procedure TTestFactory.ArrayCreateInteger;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([1]);
- AssertElement0(TMyInteger);
- end;
- procedure TTestFactory.ArrayCreateInt64;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([int64(1)]);
- AssertElement0(TMyInt64);
- end;
- procedure TTestFactory.ArrayCreateFloat;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([1.2]);
- AssertElement0(TMyFloat);
- end;
- procedure TTestFactory.ArrayCreateBoolean;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray([True]);
- AssertElement0(TMyBoolean);
- end;
- procedure TTestFactory.ArrayCreateString;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONArray(['true']);
- AssertElement0(TMyString);
- end;
- procedure TTestFactory.ObjectAddNull;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject([]);
- TJSONObject(Data).Add('a');
- AssertElementA(TMyNull);
- end;
- procedure TTestFactory.ObjectAddInteger;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject([]);
- TJSONObject(Data).Add('a',1);
- AssertElementA(TMyInteger);
- end;
- procedure TTestFactory.ObjectAddInt64;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject([]);
- TJSONObject(Data).Add('a',Int64(1));
- AssertElementA(TMyInt64);
- end;
- procedure TTestFactory.ObjectAddFloat;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject([]);
- TJSONObject(Data).Add('a',1.2);
- AssertElementA(TMyFloat);
- end;
- procedure TTestFactory.ObjectAddBoolean;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject([]);
- TJSONObject(Data).Add('a',True);
- AssertElementA(TMyBoolean);
- end;
- procedure TTestFactory.ObjectAddString;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject([]);
- TJSONObject(Data).Add('a','True');
- AssertElementA(TMyString);
- end;
- procedure TTestFactory.ObjectCreateNull;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject(['a',Nil]);
- AssertElementA(TMyNull);
- end;
- procedure TTestFactory.ObjectCreateInteger;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject(['a',1]);
- AssertElementA(TMyInteger);
- end;
- procedure TTestFactory.ObjectCreateInt64;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject(['a',int64(1)]);
- AssertElementA(TMyInt64);
- end;
- procedure TTestFactory.ObjectCreateFloat;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject(['a',1.2]);
- AssertElementA(TMyFloat);
- end;
- procedure TTestFactory.ObjectCreateBoolean;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject(['a',True]);
- AssertElementA(TMyBoolean);
- end;
- procedure TTestFactory.ObjectCreateString;
- begin
- SetMyInstanceTypes;
- Data:=CreateJSONObject(['a','true']);
- AssertElementA(TMyString);
- end;
- { TTestJSONPath }
- procedure TTestJSONPath.TearDown;
- begin
- FreeAndNil(FData);
- inherited TearDown;
- end;
- procedure TTestJSONPath.TestNullEmpty;
- begin
- Data:=TJSONNull.Create;
- AssertSame('Empty on NULL returns object itself',Data,Data.FIndPath(''));
- end;
- procedure TTestJSONPath.TestNullGet;
- begin
- Data:=TJSONNull.Create;
- AssertSame('Empty get on NULL returns object itself',Data,Data.GetPath(''));
- end;
- procedure TTestJSONPath.TestNullNonExisting;
- Var
- Msg : String;
- begin
- Data:=TJSONNull.Create;
- try
- Data.GetPath('a.b.c');
- Msg:='No exception raised'
- except
- on E : Exception do
- begin
- If Not (E is EJSON) then
- Msg:='Wrong exception class. Got '+E.ClassName+' instead of EJSON'
- else
- If E.Message<>'Path "a.b.c" invalid: element "a.b.c" not found.' then
- Msg:='Wrong exception message, expected: "Path "a.b.c" invalid: element "a.b.c" not found.", actual: "'+E.Message+'"';
- end;
- end;
- If (Msg<>'') then
- Fail(Msg);
- end;
- procedure TTestJSONPath.TestNullNotEmpty;
- begin
- Data:=TJSONNull.Create;
- AssertNull('Not empty on NULL returns nil',Data.FindPath('a'));
- end;
- procedure TTestJSONPath.TestBooleanEmpty;
- begin
- Data:=TJSONBoolean.Create(true);
- AssertSame('Empty on Boolean returns object itself',Data,Data.FIndPath(''));
- end;
- procedure TTestJSONPath.TestBooleanNotEmpty;
- begin
- Data:=TJSONBoolean.Create(True);
- AssertNull('Not empty on Boolean returns nil',Data.FindPath('a'));
- end;
- procedure TTestJSONPath.TestIntegerEmpty;
- begin
- Data:=TJSONIntegerNumber.Create(1);
- AssertSame('Empty on integer returns object itself',Data,Data.FIndPath(''));
- end;
- procedure TTestJSONPath.TestIntegerNotEmpty;
- begin
- Data:=TJSONIntegerNumber.Create(1);
- AssertNull('Not Empty on integer returns object itself',Data.FIndPath('a'));
- end;
- procedure TTestJSONPath.TestInt64Empty;
- begin
- Data:=TJSONInt64Number.Create(1);
- AssertSame('Empty on Int64 returns object itself',Data,Data.FIndPath(''));
- end;
- procedure TTestJSONPath.TestInt64NotEmpty;
- begin
- Data:=TJSONInt64Number.Create(1);
- AssertNull('Not Empty on Int64 returns object itself',Data.FIndPath('a'));
- end;
- procedure TTestJSONPath.TestFloatEmpty;
- begin
- Data:=TJSONFloatNumber.Create(1);
- AssertSame('Empty on Float returns object itself',Data,Data.FIndPath(''));
- end;
- procedure TTestJSONPath.TestFloatNotEmpty;
- begin
- Data:=TJSONFloatNumber.Create(1);
- AssertNull('Not Empty on Float returns object itself',Data.FIndPath('a'));
- end;
- procedure TTestJSONPath.TestStringEmpty;
- begin
- Data:=TJSONString.Create('1');
- AssertSame('Empty on String returns object itself',Data,Data.FIndPath(''));
- end;
- procedure TTestJSONPath.TestStringNotEmpty;
- begin
- Data:=TJSONString.Create('1');
- AssertNull('Not Empty on String returns object itself',Data.FIndPath('a'));
- end;
- procedure TTestJSONPath.TestArrayEmpty;
- begin
- Data:=TJSONArray.Create([1,2,3]);
- AssertSame('Empty on array returns object itself',Data,Data.FIndPath(''));
- end;
- procedure TTestJSONPath.TestArrayNotIndex;
- begin
- Data:=TJSONArray.Create([1,2,3]);
- AssertNull('Not index indication on array returns object itself',Data.FindPath('oo'));
- end;
- procedure TTestJSONPath.TestArrayIncompleteIndex;
- begin
- Data:=TJSONArray.Create([1,2,3]);
- AssertNull('Not complete index indication on array returns object itself',Data.FindPath('[1'));
- AssertNull('Not complete index indication on array returns object itself',Data.FindPath('['));
- end;
- procedure TTestJSONPath.TestArrayNonNumericalIndex;
- begin
- Data:=TJSONArray.Create([1,2,3]);
- AssertNull('Not complete index indication on array returns object itself',Data.FindPath('[a]'));
- end;
- procedure TTestJSONPath.TestArrayOutOfRangeIndex;
- begin
- Data:=TJSONArray.Create([1,2,3]);
- AssertNull('Not complete index indication on array returns object itself',Data.FindPath('[-1]'));
- AssertNull('Not complete index indication on array returns object itself',Data.FindPath('[3]'));
- end;
- procedure TTestJSONPath.TestArrayCorrectIndex;
- begin
- Data:=TJSONArray.Create([1,2,3]);
- AssertSame('Index 0 on array returns item 0',Data.Items[0],Data.FindPath('[0]'));
- AssertSame('Index 1 on array returns item 1',Data.Items[1],Data.FindPath('[1]'));
- AssertSame('Index 2 on array returns item 2',Data.Items[2],Data.FindPath('[2]'));
- end;
- procedure TTestJSONPath.TestArrayRecursiveArray;
- Var
- A : TJSONArray;
- begin
- A:=TJSONArray.Create([1,2,3]);
- Data:=TJSONArray.Create([A,1,2,3]);
- AssertSame('Index [0][0] on array returns item 0',A.Items[0],Data.FindPath('[0][0]'));
- AssertSame('Index [0][1] on array returns item 1',A.Items[1],Data.FindPath('[0][1]'));
- AssertSame('Index [0][2] on array returns item 2',A.Items[2],Data.FindPath('[0][2]'));
- end;
- procedure TTestJSONPath.TestArrayRecursiveObject;
- Var
- A : TJSONObject;
- begin
- A:=TJSONObject.Create(['a',1,'b',2,'c',3]);
- Data:=TJSONArray.Create([A,1,2,3]);
- AssertSame('[0]a on array returns element a of item 0',A.Elements['a'],Data.FindPath('[0]a'));
- AssertSame('[0]b on array returns element b of item 0',A.Elements['b'],Data.FindPath('[0]b'));
- AssertSame('[0]c on array returns element c of item 0',A.Elements['c'],Data.FindPath('[0]c'));
- AssertSame('[0].a on array returns element a of item 0',A.Elements['a'],Data.FindPath('[0].a'));
- AssertSame('[0].b on array returns element b of item 0',A.Elements['b'],Data.FindPath('[0].b'));
- AssertSame('[0].c on array returns element c of item 0',A.Elements['c'],Data.FindPath('[0].c'));
- end;
- procedure TTestJSONPath.TestObjectEmpty;
- begin
- Data:=TJSONObject.Create(['a',1,'b',2,'c',3]);
- AssertSame('Empty on object returns object',Data,Data.FindPath(''));
- end;
- procedure TTestJSONPath.TestObjectDots;
- begin
- Data:=TJSONObject.Create(['a',1,'b',2,'c',3]);
- AssertSame('Dot on object returns object',Data,Data.FindPath('.'));
- AssertSame('2 Dots on object returns object',Data,Data.FindPath('..'));
- AssertSame('3 Dots on object returns object',Data,Data.FindPath('...'));
- end;
- procedure TTestJSONPath.TestObjectExisting;
- begin
- Data:=TJSONObject.Create(['a',1,'b',2,'c',3]);
- AssertSame('a on object returns element a',TJSONObject(Data).Elements['a'],Data.FindPath('a'));
- AssertSame('.a on object returns element a',TJSONObject(Data).Elements['a'],Data.FindPath('.a'));
- AssertSame('..a on object returns element a',TJSONObject(Data).Elements['a'],Data.FindPath('..a'));
- end;
- procedure TTestJSONPath.TestObjectNonExisting;
- begin
- Data:=TJSONObject.Create(['a',1,'b',2,'c',3]);
- AssertNull('d on object returns nil',Data.FindPath('d'));
- end;
- procedure TTestJSONPath.TestObjectTrailingDot;
- begin
- Data:=TJSONObject.Create(['a',1,'b',2,'c',3]);
- AssertNull('a. on object returns nil',Data.FindPath('a.'));
- end;
- procedure TTestJSONPath.TestObjectRecursiveArray;
- Var
- A : TJSONArray;
- begin
- A:=TJSONArray.Create([1,2,3]);
- Data:=TJSONObject.Create(['a',A,'b',2,'c',3]);
- AssertSame('a[0] returns item 0 of array a',A.Items[0],Data.FindPath('a[0]'));
- end;
- procedure TTestJSONPath.TestObjectRecursiveObject;
- Var
- O : TJSONObject;
- D : TJSONData;
- begin
- D :=TJSONIntegerNumber.Create(1);
- O:=TJSONObject.Create(['b',D]);
- Data:=TJSONObject.Create(['a',O]);
- AssertSame('a.b returns correct data ',D,Data.FindPath('a.b'));
- AssertSame('a..b returns correct data ',D,Data.FindPath('a..b'));
- end;
- procedure TTestJSONPath.TestDeepRecursive;
- Var
- O : TJSONObject;
- A : TJSONArray;
- D : TJSONData;
- begin
- D :=TJSONIntegerNumber.Create(1);
- A:=TJSONArray.Create([0,'string',TJSONObject.Create(['b',D])]);
- Data:=TJSONObject.Create(['a',TJSONObject.Create(['c',A])]);
- AssertSame('a.c[2].b returns correct data ',D,Data.FindPath('a.c[2].b'));
- AssertSame('a.c[2]b returns correct data ',D,Data.FindPath('a.c[2]b'));
- AssertNull('a.c[2]d returns nil ',Data.FindPath('a.c[2]d'));
- end;
- { TTestJSON }
- Const
- DefJSONInstanceTypes :
- Array [TJSONInstanceType] of TJSONDataClass = (TJSONData, TJSONIntegerNumber,
- TJSONInt64Number,TJSONQWordNumber,TJSONFloatNumber, TJSONString, TJSONBoolean,
- TJSONNull, TJSONArray, TJSONObject);
- Const
- MyJSONInstanceTypes :
- Array [TJSONInstanceType] of TJSONDataClass = (TJSONData, TMyInteger,
- TMyInt64, TMyQWord,TMyFloat, TMyString, TMyBoolean, TMyNull, TMyArray,
- TMyObject);
- procedure TTestJSON.SetDefaultInstanceTypes;
- Var
- Ti : TJSONInstanceType;
- begin
- For ti:=Low(TJSONInstanceType) to High(TJSONInstanceType) do
- SetJSONInstanceType(Ti,DefJSONInstanceTypes[ti]);
- end;
- procedure TTestJSON.SetMyInstanceTypes;
- Var
- Ti : TJSONInstanceType;
- begin
- For ti:=Low(TJSONInstanceType) to High(TJSONInstanceType) do
- AssertEquals('Previous value is returned by SetJSONInstanceType',DefJSONInstanceTypes[ti],SetJSONInstanceType(Ti,MyJSONInstanceTypes[ti]));
- end;
- Procedure TTestJSON.SetUp;
- begin
- inherited SetUp;
- SetDefaultInstanceTypes;
- TJSONData.CompressedJSON:=False;
- TJSONObject.UnquotedMemberNames:=False;
- end;
- Procedure TTestJSON.TestItemCount(J: TJSONData; Expected: Integer);
- begin
- AssertEquals(J.ClassName+'.ItemCount',Expected,J.Count);
- end;
- Procedure TTestJSON.TestJSONType(J: TJSONData; Expected: TJSONType);
- begin
- AssertEquals(J.ClassName+'.JSONType',Ord(Expected),Ord(J.JSONType));
- end;
- Procedure TTestJSON.TestJSON(J: TJSONData; Expected: String);
- begin
- AssertEquals(J.ClassName+'.AsJSON',Expected,J.AsJSON);
- end;
- Procedure TTestJSON.TestIsNull(J: TJSONData; Expected: Boolean);
- begin
- AssertEquals(J.ClassName+'.IsNull',Expected,J.IsNull);
- end;
- Procedure TTestJSON.TestAsBoolean(J: TJSONData; Expected: Boolean;
- ExpectError: boolean);
- Var
- B : Boolean;
- AssignOK : Boolean;
- Msg : String;
-
- begin
- AssignOK:=False;
- Try
- B:=J.AsBoolean;
- AssignOK:=True;
- If Not ExpectError then
- AssertEquals(J.Classname+'.AsBoolean',Expected,B);
- except
- On E : Exception do
- begin
- AssignOK:=False;
- Msg:=E.Message;
- end;
- end;
- If ExpectError then
- begin
- If AssignOK then
- Fail(J.ClassName+'.AsBoolean must raise error');
- end
- else
- begin
- If not AssignOK then
- Fail(J.ClassName+'.AsBoolean raised unexpected exception: '+Msg)
- end;
- end;
- Procedure TTestJSON.TestAsInteger(J: TJSONData; Expected: Integer;
- ExpectError: boolean);
- Var
- I : Integer;
- AssignOK : Boolean;
- Msg : String;
- begin
- AssignOK:=False;
- Try
- I:=J.AsInteger;
- AssignOK:=True;
- If Not ExpectError then
- AssertEquals(J.Classname+'.AsInteger',Expected,I);
- except
- On E : Exception do
- begin
- AssignOK:=False;
- Msg:=E.Message;
- end;
- end;
- If ExpectError then
- begin
- If AssignOK then
- Fail(J.ClassName+'.AsInteger must raise error');
- end
- else
- begin
- If not AssignOK then
- Fail(J.ClassName+'.AsInteger raised unexpected exception: '+Msg)
- end;
- end;
- Procedure TTestJSON.TestAsInt64(J: TJSONData; Expected: Int64;
- ExpectError: boolean);
- Var
- I : Int64;
- AssignOK : Boolean;
- Msg : String;
- begin
- AssignOK:=False;
- Try
- I:=J.AsInt64;
- AssignOK:=True;
- If Not ExpectError then
- AssertEquals(J.Classname+'.AsInt64',Expected,I);
- except
- On E : Exception do
- begin
- AssignOK:=False;
- Msg:=E.Message;
- end;
- end;
- If ExpectError then
- begin
- If AssignOK then
- Fail(J.ClassName+'.AsInt64 must raise error');
- end
- else
- begin
- If not AssignOK then
- Fail(J.ClassName+'.AsInt64 raised unexpected exception: '+Msg)
- end;
- end;
- Procedure TTestJSON.TestAsQWord(J: TJSONData; Expected: QWord;
- ExpectError: boolean);
- Var
- Q : QWord;
- AssignOK : Boolean;
- Msg : String;
- begin
- AssignOK:=False;
- Try
- Q:=J.AsQWord;
- AssignOK:=True;
- If Not ExpectError then
- AssertEquals(J.Classname+'.AsQWord',IntToStr(Expected),IntToStr(Q));
- except
- On E : Exception do
- begin
- AssignOK:=False;
- Msg:=E.Message;
- end;
- end;
- If ExpectError then
- begin
- If AssignOK then
- Fail(J.ClassName+'.AsQWord must raise error');
- end
- else
- begin
- If not AssignOK then
- Fail(J.ClassName+'.AsInt64 raised unexpected exception: '+Msg)
- end;
- end;
- Procedure TTestJSON.TestAsString(J: TJSONData; Expected: String;
- ExpectError: boolean);
-
- Var
- S : String;
- AssignOK : Boolean;
- Msg : String;
- begin
- AssignOK:=False;
- Try
- S:=J.AsString;
- AssignOK:=True;
- If Not ExpectError then
- AssertEquals(J.Classname+'.AsString',Expected,S);
- except
- On E : Exception do
- begin
- AssignOK:=False;
- Msg:=E.Message;
- end;
- end;
- If ExpectError then
- begin
- If AssignOK then
- Fail(J.ClassName+'.AsString must raise error');
- end
- else
- begin
- If not AssignOK then
- Fail(J.ClassName+'.AsString raised unexpected exception: '+Msg)
- end;
- end;
- Procedure TTestJSON.TestAsFloat(J: TJSONData; Expected: TJSONFloat;
- ExpectError: boolean);
-
- Var
- F : TJSONFloat;
- AssignOK : Boolean;
- Msg : String;
- begin
- AssignOK:=False;
- Try
- F:=J.AsFloat;
- AssignOK:=True;
- If Not ExpectError then
- AssertEquals(J.Classname+'.AsFloat',Expected,F);
- except
- On E : Exception do
- begin
- AssignOK:=False;
- Msg:=E.Message;
- end;
- end;
- If ExpectError then
- begin
- If AssignOK then
- Fail(J.ClassName+'.AsFloat must raise error');
- end
- else
- begin
- If not AssignOK then
- Fail(J.ClassName+'.AsFloat raised unexpected exception: '+Msg)
- end;
- end;
- { TTestBoolean }
- procedure TTestBoolean.TestTrue;
- Var
- J : TJSONBoolean;
- begin
- J:=TJSONBoolean.Create(True);
- try
- TestJSONType(J,jtBoolean);
- TestItemCount(J,0);
- TestJSON(J,'true');
- TestIsNull(J,False);
- TestAsBoolean(J,True);
- TestAsInteger(J,1);
- TestAsInt64(J,1);
- TestAsQword(J,1);
- TestAsString(J,BoolToStr(True,True));
- TestAsFloat(J,1.0);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestBoolean.TestFalse;
- Var
- J : TJSONBoolean;
- begin
- J:=TJSONBoolean.Create(False);
- try
- TestJSONType(J,jtBoolean);
- TestItemCount(J,0);
- TestJSON(J,'false');
- TestIsNull(J,False);
- TestAsBoolean(J,False);
- TestAsInteger(J,0);
- TestAsInt64(J,0);
- TestAsQWord(J,0);
- TestAsString(J,BoolToStr(False,True));
- TestAsFloat(J,0.0);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestBoolean.TestClone;
- Var
- B : TJSONBoolean;
- D : TJSONData;
- begin
- B:=TJSONBoolean.Create(true);
- try
- D:=B.Clone;
- try
- TestJSONType(D,jtBoolean);
- TestAsBoolean(D,true);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(B);
- end;
- end;
- procedure TTestBoolean.TestMyClone;
- Var
- B : TMyBoolean;
- D : TJSONData;
- begin
- B:=TMyBoolean.Create(true);
- try
- D:=B.Clone;
- try
- TestJSONType(D,jtBoolean);
- AssertEquals('Correct class',TMyBoolean,D.ClassType);
- TestAsBoolean(D,true);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(B);
- end;
- end;
- procedure TTestBoolean.TestFormat;
- Var
- B : TJSONBoolean;
- begin
- B:=TJSONBoolean.Create(true);
- try
- AssertEquals('FormatJSON same as asJSON',B.asJSON,B.FormatJSON);
- finally
- B.Free;
- end;
- end;
- { TTestNull }
- procedure TTestNull.TestNull;
- Var
- J : TJSONNull;
- begin
- J:=TJSONNull.Create;
- try
- TestJSONType(J,jtNull);
- TestItemCount(J,0);
- TestJSON(J,'null');
- TestIsNull(J,True);
- TestAsBoolean(J,False,True);
- TestAsInteger(J,0,true);
- TestAsInt64(J,0,true);
- TestAsQWord(J,0,true);
- TestAsString(J,BoolToStr(False),true);
- TestAsFloat(J,0.0,true);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestNull.TestClone;
- Var
- J : TJSONNull;
- D : TJSONData;
- begin
- J:=TJSONNull.Create;
- try
- D:=J.Clone;
- try
- TestIsNull(D,True);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestNull.TestMyClone;
- Var
- J : TMyNull;
- D : TJSONData;
- begin
- J:=TMyNull.Create;
- try
- D:=J.Clone;
- try
- TestIsNull(D,True);
- AssertEquals('Correct class',TMyNull,D.ClassType);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestNull.TestFormat;
- Var
- J : TJSONNull;
- begin
- J:=TJSONNull.Create;
- try
- AssertEquals('FormatJSON same as asJSON',J.asJSON,J.FormatJSON);
- finally
- J.Free;
- end;
- end;
- { TTestString }
- procedure TTestString.TestString;
- Const
- S = 'A string';
- Var
- J : TJSONString;
- begin
- J:=TJSONString.Create(S);
- try
- TestJSONType(J,jtString);
- TestItemCount(J,0);
- TestJSON(J,'"'+S+'"');
- TestIsNull(J,False);
- TestAsBoolean(J,False,True);
- TestAsInteger(J,0,true);
- TestAsInt64(J,0,true);
- TestAsQWord(J,0,true);
- TestAsString(J,S);
- TestAsFloat(J,0.0,true);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestString.TestInteger;
- Const
- S = '1';
- Var
- J : TJSONString;
- begin
- J:=TJSONString.Create(S);
- try
- TestJSONType(J,jtString);
- TestItemCount(J,0);
- TestJSON(J,'"'+S+'"');
- TestIsNull(J,False);
- TestAsBoolean(J,True,False);
- TestAsInteger(J,1,False);
- TestAsInt64(J,1,False);
- TestAsQWord(J,1,False);
- TestAsString(J,S);
- TestAsFloat(J,1.0,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestString.TestNegativeInteger;
- Const
- S = '-1';
- Var
- J : TJSONString;
- begin
- J:=TJSONString.Create(S);
- try
- TestJSONType(J,jtString);
- TestItemCount(J,0);
- TestJSON(J,'"'+S+'"');
- TestIsNull(J,False);
- TestAsBoolean(J,True,False);
- TestAsInteger(J,-1,False);
- TestAsInt64(J,-1,False);
- TestAsQWord(J,-1,True);
- TestAsString(J,S);
- TestAsFloat(J,-1.0,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestString.TestFloat;
- begin
- DoTestFloat(1.0,'1.0',True);
- DoTestFloat(1.0,'1',True);
- DoTestFloat(1.0,'1e0',True);
- DoTestFloat(1.2,'1.2',True);
- DoTestFloat(12.0,'1.2e1',True);
- end;
- procedure TTestString.TestNegativeFloat;
- begin
- DoTestFloat(-1.0,'-1.0',True);
- DoTestFloat(-1.0,'-1',True);
- DoTestFloat(-1.0,'-1e0',True);
- DoTestFloat(-1.2,'-1.2',True);
- DoTestFloat(-12.0,'-1.2e1',True);
- end;
- procedure TTestString.TestBooleanTrue;
- Const
- S = 'true';
- Var
- J : TJSONString;
- begin
- J:=TJSONString.Create(S);
- try
- TestJSONType(J,jtString);
- TestItemCount(J,0);
- TestJSON(J,'"'+S+'"');
- TestIsNull(J,False);
- TestAsBoolean(J,True,False);
- TestAsInteger(J,-1,True);
- TestAsInt64(J,-1,True);
- TestAsQWord(J,-1,True);
- TestAsString(J,S);
- TestAsFloat(J,-1.0,True);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestString.TestBooleanFalse;
- Const
- S = 'false';
- Var
- J : TJSONString;
- begin
- J:=TJSONString.Create(S);
- try
- TestJSONType(J,jtString);
- TestItemCount(J,0);
- TestJSON(J,'"'+S+'"');
- TestIsNull(J,False);
- TestAsBoolean(J,False,False);
- TestAsInteger(J,0,True);
- TestAsInt64(J,0,True);
- TestAsQWord(J,0,True);
- TestAsString(J,S);
- TestAsFloat(J,0,True);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestString.TestClone;
- Var
- S : TJSONString;
- D : TJSONData;
- begin
- S:=TJSONString.Create('aloha');
- try
- D:=S.Clone;
- try
- TestJSONType(D,jtString);
- TestAsString(D,'aloha');
- finally
- D.Free;
- end;
- finally
- FreeAndNil(S);
- end;
- end;
- procedure TTestString.TestMyClone;
- Var
- S : TMyString;
- D : TJSONData;
- begin
- S:=TMyString.Create('aloha');
- try
- D:=S.Clone;
- try
- AssertEquals('Correct class',TMyString,D.ClassType);
- TestJSONType(D,jtString);
- TestAsString(D,'aloha');
- finally
- D.Free;
- end;
- finally
- FreeAndNil(S);
- end;
- end;
- procedure TTestString.TestFormat;
- Var
- S : TJSONString;
- begin
- S:=TJSONString.Create('aloha');
- try
- AssertEquals('FormatJSON equals JSON',S.AsJSON,S.FormatJSOn);
- finally
- FreeAndNil(S);
- end;
- end;
- procedure TTestString.DoTestFloat(F : TJSOnFloat;S : String; OK : Boolean);
- Var
- J : TJSONString;
- begin
- J:=TJSONString.Create(S);
- try
- TestJSONType(J,jtString);
- TestItemCount(J,0);
- TestJSON(J,'"'+S+'"');
- TestIsNull(J,False);
- TestAsBoolean(J,(F<>0),Not OK);
- TestAsInteger(J,Round(F),(Pos('.',S)<>0) or (Pos('E',UpperCase(S))<>0));
- TestAsInt64(J,Round(F),(Pos('.',S)<>0) or (Pos('E',UpperCase(S))<>0));
- if F>0 then
- TestAsQword(J,Round(F),(Pos('.',S)<>0) or (Pos('E',UpperCase(S))<>0));
- TestAsString(J,S);
- TestAsFloat(J,F,Not OK);
- finally
- FreeAndNil(J);
- end;
- end;
- { TTestInteger }
- procedure TTestInteger.DoTest(I: Integer);
- Var
- J : TJSONIntegerNumber;
- begin
- J:=TJSONIntegerNumber.Create(I);
- try
- TestJSONType(J,jtNumber);
- TestItemCount(J,0);
- AssertEquals('Numbertype is ntInteger',ord(ntInteger),Ord(J.NumberType));
- TestJSON(J,IntToStr(i));
- TestIsNull(J,False);
- TestAsBoolean(J,(I<>0));
- TestAsInteger(J,I);
- TestAsInt64(J,I);
- TestAsQword(J,I);
- TestAsString(J,IntToStr(I));
- TestAsFloat(J,I);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestInteger.TestPositive;
- begin
- DoTest(1);
- end;
- procedure TTestInteger.TestNegative;
- begin
- DoTest(-1);
- end;
- procedure TTestInteger.TestZero;
- begin
- DoTest(0);
- end;
- procedure TTestInteger.TestClone;
- Var
- I : TJSONIntegerNumber;
- D : TJSONData;
- begin
- I:=TJSONIntegerNumber.Create(99);
- try
- D:=I.Clone;
- try
- TestJSONType(D,jtNumber);
- TestAsInteger(D,99);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(I);
- end;
- end;
- procedure TTestInteger.TestMyClone;
- Var
- I : TMyInteger;
- D : TJSONData;
- begin
- I:=TMyInteger.Create(99);
- try
- D:=I.Clone;
- try
- AssertEquals('Correct class',TMyInteger,D.ClassType);
- TestJSONType(D,jtNumber);
- TestAsInteger(D,99);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(I);
- end;
- end;
- procedure TTestInteger.TestFormat;
- Var
- I : TJSONIntegerNumber;
- begin
- I:=TJSONIntegerNumber.Create(99);
- try
- AssertEquals('FormatJSON equal to JSON',I.AsJSON,I.FormatJSON);
- finally
- FreeAndNil(I);
- end;
- end;
- { TTestInt64 }
- procedure TTestInt64.DoTest(I: Int64);
- Var
- J : TJSONInt64Number;
- begin
- J:=TJSONInt64Number.Create(I);
- try
- TestJSONType(J,jtNumber);
- TestItemCount(J,0);
- AssertEquals('Numbertype is ntInt64',ord(ntInt64),Ord(J.NumberType));
- TestJSON(J,IntToStr(i));
- TestIsNull(J,False);
- TestAsBoolean(J,(I<>0));
- TestAsInteger(J,I);
- TestAsInt64(J,I);
- TestAsQword(J,I);
- TestAsString(J,IntToStr(I));
- TestAsFloat(J,I);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestInt64.TestPositive;
- begin
- DoTest(1);
- end;
- procedure TTestInt64.TestNegative;
- begin
- DoTest(-1);
- end;
- procedure TTestInt64.TestZero;
- begin
- DoTest(0);
- end;
- procedure TTestInt64.TestClone;
- Var
- I : TJSONInt64Number;
- D : TJSONData;
- begin
- I:=TJSONInt64Number.Create(99);
- try
- D:=I.Clone;
- try
- TestJSONType(D,jtNumber);
- AssertEquals('Numbertype is ntInt64',ord(ntInt64),Ord(TJSONInt64Number(D).NumberType));
- TestAsInteger(D,99);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(I);
- end;
- end;
- procedure TTestInt64.TestMyClone;
- Var
- I : TMyInt64;
- D : TJSONData;
- begin
- I:=TMyInt64.Create(99);
- try
- D:=I.Clone;
- try
- AssertEquals('Correct class',TMyInt64,D.ClassType);
- TestJSONType(D,jtNumber);
- AssertEquals('Numbertype is ntInt64',ord(ntInt64),Ord(TMyInt64(D).NumberType));
- TestAsInteger(D,99);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(I);
- end;
- end;
- procedure TTestInt64.TestFormat;
- Var
- I : TJSONInt64Number;
- begin
- I:=TJSONInt64Number.Create(99);
- try
- AssertEquals('FormatJSON equal to JSON',I.AsJSON,I.FormatJSON);
- finally
- FreeAndNil(I);
- end;
- end;
- { TTestQWord }
- procedure TTestQWord.DoTest(Q: QWord);
- Var
- J : TJSONQWordNumber;
- begin
- J:=TJSONQWordNumber.Create(Q);
- try
- TestJSONType(J,jtNumber);
- TestItemCount(J,0);
- AssertEquals('Numbertype is ntQWord',ord(ntQWord),Ord(J.NumberType));
- TestJSON(J,IntToStr(Q));
- TestIsNull(J,False);
- TestAsBoolean(J,(Q<>0));
- TestAsInteger(J,Q);
- TestAsInt64(J,Q);
- TestAsQword(J,Q);
- TestAsString(J,IntToStr(Q));
- TestAsFloat(J,Q);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestQWord.TestPositive;
- begin
- DoTest(1);
- end;
- procedure TTestQWord.TestZero;
- begin
- DoTest(0);
- end;
- procedure TTestQWord.TestClone;
- Var
- I : TJSONQWordNumber;
- D : TJSONData;
- begin
- I:=TJSONQWordNumber.Create(99);
- try
- D:=I.Clone;
- try
- TestJSONType(D,jtNumber);
- AssertEquals('Numbertype is ntQWord',ord(ntQWord),Ord(TJSONQWordNumber(D).NumberType));
- TestAsInteger(D,99);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(I);
- end;
- end;
- procedure TTestQWord.TestMyClone;
- Var
- I : TMyQWord;
- D : TJSONData;
- begin
- I:=TMyQWord.Create(99);
- try
- D:=I.Clone;
- try
- AssertEquals('Correct class',TMyQWord,D.ClassType);
- TestJSONType(D,jtNumber);
- AssertEquals('Numbertype is ntQWord',ord(ntQWord),Ord(TMyQWord(D).NumberType));
- TestAsInteger(D,99);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(I);
- end;
- end;
- procedure TTestQWord.TestFormat;
- Var
- I : TJSONQWordNumber;
- begin
- I:=TJSONQWordNumber.Create(99);
- try
- AssertEquals('FormatJSON equal to JSON',I.AsJSON,I.FormatJSON);
- finally
- FreeAndNil(I);
- end;
- end;
- { TTestFloat }
- procedure TTestFloat.DoTest(F: TJSONFloat);
- Var
- J : TJSONFloatNumber;
- S : String;
-
- begin
- Str(F,S);
- If S[1]=' ' then
- Delete(S,1,1);
- J:=TJSONFloatNumber.Create(F);
- try
- TestJSONType(J,jtNumber);
- TestItemCount(J,0);
- AssertEquals('Numbertype is ntFloat',ord(ntFloat),Ord(J.NumberType));
- TestJSON(J,S);
- TestIsNull(J,False);
- TestAsBoolean(J,(F<>0));
- TestAsInteger(J,Round(F));
- TestAsInt64(J,Round(F));
- TestAsQword(J,Round(F));
- TestAsString(J,S);
- TestAsFloat(J,F);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestFloat.TestPositive;
- begin
- DoTest(1.0);
- DoTest(1.2);
- DoTest(1.2e1);
- DoTest(1.2e-1);
- DoTest(1.2e10);
- DoTest(1.2e-10);
- end;
- procedure TTestFloat.TestNegative;
- begin
- DoTest(-1.0);
- DoTest(-1.2);
- DoTest(-1.2e1);
- DoTest(-1.2e-1);
- DoTest(-1.2e10);
- DoTest(-1.2e-10);
- end;
- procedure TTestFloat.TestZero;
- begin
- DoTest(0.0);
- end;
- procedure TTestFloat.TestClone;
- Var
- F : TJSONFloatNumber;
- D : TJSONData;
- begin
- F:=TJSONFloatNumber.Create(1.23);
- try
- D:=F.Clone;
- try
- TestJSONType(D,jtNumber);
- AssertEquals('Numbertype is ntFloat',ord(ntFloat),Ord(TJSONFloatNumber(D).NumberType));
- TestAsFloat(D,1.23);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(F);
- end;
- end;
- procedure TTestFloat.TestMyClone;
- Var
- F : TMyFloat;
- D : TJSONData;
- begin
- F:=TMyFloat.Create(1.23);
- try
- D:=F.Clone;
- try
- AssertEquals('Correct class',TMyFloat,D.ClassType);
- TestJSONType(D,jtNumber);
- AssertEquals('Numbertype is ntFloat',ord(ntFloat),Ord(TMyFloat(D).NumberType));
- TestAsFloat(D,1.23);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(F);
- end;
- end;
- procedure TTestFloat.TestFormat;
- Var
- F : TJSONFloatNumber;
- begin
- F:=TJSONFloatNumber.Create(1.23);
- try
- AssertEquals('FormatJSON equals asJSON',F.AsJSON,F.FormatJSON);
- finally
- FreeAndNil(F);
- end;
- end;
- { TTestArray }
- procedure TTestArray.TestCreate;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create;
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,0);
- TestJSON(J,'[]');
- TestIsNull(J,False);
- TestAsBoolean(J,False,True);
- TestAsInteger(J,1,True);
- TestAsInt64(J,1,True);
- TestAsQWord(J,1,True);
- TestAsString(J,'',True);
- TestAsFloat(J,0.0,True);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateString;
- Const
- S = 'A string';
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create([S]);
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,1);
- TestJSONType(J[0],jtString);
- TestJSON(J,'["'+S+'"]');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreatePchar;
- Const
- S = 'A string';
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create([Pchar(S)]);
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,1);
- TestJSONType(J[0],jtString);
- TestJSON(J,'["'+S+'"]');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateStrings;
- Const
- S = 'A string';
- T = 'B string';
-
- Var
- J : TJSONArray;
- begin
- J:=TJSONArray.Create([S,T]);
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,2);
- TestJSONType(J[0],jtString);
- TestJSONType(J[1],jtString);
- TestJSON(J,'["'+S+'", "'+T+'"]');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateStringsCompressed;
- Const
- S = 'A string';
- T = 'B string';
- Var
- J : TJSONArray;
- begin
- TJSONData.CompressedJSON:=True;
- J:=TJSONArray.Create([S,T]);
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,2);
- TestJSONType(J[0],jtString);
- TestJSONType(J[1],jtString);
- TestJSON(J,'["'+S+'","'+T+'"]');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateInteger;
- Const
- S = 3;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create([S]);
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,1);
- TestJSONType(J[0],jtNumber);
- TestJSON(J,'[3]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateFloat;
- Const
- S : double = 1.2;
- Var
- J : TJSONArray;
- r : String;
-
- begin
- J:=TJSonArray.Create([S]);
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,1);
- TestJSONType(J[0],jtNumber);
- Str(S,R);
- Delete(R,1,1);
- TestJSON(J,'['+R+']');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateInt64;
- Const
- S : Int64 = $FFFFFFFFFFFFF;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create([S]);
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,1);
- TestJSONType(J[0],jtNumber);
- TestJSON(J,'['+IntToStr(S)+']');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateBoolean;
- Const
- S = True;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create([S]);
- try
- TestJSONType(J,jtArray);
- TestItemCount(J,1);
- TestJSONType(J[0],jtBoolean);
- TestJSON(J,'[true]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateJSONObject;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create([TJSONObject.Create]);
- try
- TestItemCount(J,1);
- TestJSONType(J[0],jtObject);
- TestJSON(J,'[{}]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateJSONString;
- Const
- S = 'A string';
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create([TJSONString.Create(S)]);
- try
- TestItemCount(J,1);
- TestJSONType(J[0],jtString);
- TestJSON(J,'["'+S+'"]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreateObject;
- Var
- J : TJSONArray;
- O : TObject;
-
- begin
- J:=Nil;
- try
- Try
- O:=TObject.Create;
- J:=TJSONArray.Create([O]);
- Fail('Array constructor accepts only TJSONData');
- finally
- FreeAndNil(J);
- FreeAndNil(O);
- end;
- except
- // Should be OK.
- end;
- end;
- procedure TTestArray.TestCreateNilPointer;
- Var
- J : TJSONArray;
- P : Pointer;
-
- begin
- J:=Nil;
- P:=Nil;
- Try
- J:=TJSONArray.Create([P]);
- TestJSONType(J[0],jtNull);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestCreatePointer;
- Var
- J : TJSONArray;
- P : Pointer;
-
- begin
- J:=Nil;
- P:=@Self;
- try
- Try
- J:=TJSONArray.Create([P]);
- Fail('Array constructor accepts only NIL pointers');
- finally
- FreeAndNil(J);
- end;
- except
- // Should be OK.
- end;
- end;
- procedure TTestArray.TestAddInteger;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(Integer(0));
- TestItemCount(J,1);
- TestJSONType(J[0],jtNumber);
- AssertEquals('J[0] is TJSONIntegerNumber',J[0].ClassType,TJSONIntegerNumber);
- AssertEquals('j.Types[0]=jtNumber',ord(J.Types[0]),Ord(jtNumber));
- AssertEquals('J.Integers[0]=0',0,J.integers[0]);
- TestAsInteger(J[0],0);
- TestAsInt64(J[0],0);
- TestAsQword(J[0],0);
- TestJSON(J,'[0]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestAddInt64;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(Int64(0));
- TestItemCount(J,1);
- TestJSONType(J[0],jtNumber);
- AssertEquals('J[0] is TJSONInt64Number',J[0].ClassType,TJSONInt64Number);
- AssertEquals('j.Types[0]=jtNumber',ord(J.Types[0]),Ord(jtNumber));
- AssertEquals('J.Int64s[0]=0',0,J.Int64s[0]);
- TestAsInteger(J[0],0);
- TestAsInt64(J[0],0);
- TestAsQword(J[0],0);
- TestJSON(J,'[0]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestAddFloat;
- Var
- J : TJSONArray;
- S : String;
- F : TJSONFloat;
- begin
- F:=1.2;
- J:=TJSonArray.Create;
- try
- J.Add(F);
- TestItemCount(J,1);
- TestJSONType(J[0],jtNumber);
- AssertEquals('J[0] is TJSONFloatNumber',TJSONfloatNumber,J[0].ClassType);
- AssertEquals('j.Types[0]=jtNumber',Ord(jtNumber),ord(J.Types[0]));
- AssertEquals('J.Floats[0]='+FloatToStr(F),F,J.Floats[0]);
- TestAsFloat(J[0],F);
- Str(F,S);
- Delete(S,1,1);
- TestJSON(J,'['+S+']');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestAddBoolean(B : Boolean);
- Var
- J : TJSONArray;
- begin
- B:=True;
- J:=TJSonArray.Create;
- try
- J.Add(B);
- TestItemCount(J,1);
- TestJSONType(J[0],jtBoolean);
- AssertEquals('J[0] is TJSONBoolean',TJSONBoolean,J[0].ClassType);
- TestAsBoolean(J[0],B);
- AssertEquals('J.Booleans[0]='+BoolToStr(B)+'"',B,J.Booleans[0]);
- If B then
- TestJSON(J,'[true]')
- else
- TestJSON(J,'[false]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestInsertBoolean(B: Boolean);
- Var
- J : TJSONArray;
- begin
- B:=True;
- J:=TJSonArray.Create;
- try
- J.Add(Not B);
- J.Insert(0,B);
- TestItemCount(J,2);
- TestJSONType(J[0],jtBoolean);
- AssertEquals('J[0] is TJSONBoolean',TJSONBoolean,J[0].ClassType);
- TestAsBoolean(J[0],B);
- AssertEquals('J.Booleans[0]='+BoolToStr(B)+'"',B,J.Booleans[0]);
- If B then
- TestJSON(J,'[true, false]')
- else
- TestJSON(J,'[false, true]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestAddBooleanTrue;
- begin
- TestAddBoolean(True);
- end;
- procedure TTestArray.TestAddBooleanFalse;
- begin
- TestAddBoolean(False);
- end;
- procedure TTestArray.TestAddString;
- Var
- J : TJSONArray;
- S : String;
- F : TJSONFloat;
-
- begin
- S:='A string';
- J:=TJSonArray.Create;
- try
- J.Add(S);
- TestItemCount(J,1);
- TestJSONType(J[0],jtString);
- AssertEquals('J[0] is TJSONString',TJSONString,J[0].ClassType);
- TestAsString(J[0],S);
- AssertEquals('J.Strings[0]="'+S+'"',S,J.Strings[0]);
- TestJSON(J,'["'+StringToJSONString(S)+'"]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestAddNull;
- Var
- J : TJSONArray;
- S : String;
- F : TJSONFloat;
- begin
- J:=TJSonArray.Create;
- try
- J.Add;
- TestItemCount(J,1);
- TestJSONType(J[0],jtNull);
- AssertEquals('J[0] is TJSONNull',TJSONNull,J[0].ClassType);
- AssertEquals('J.Nulls[0]=True',True,J.Nulls[0]);
- TestIsNull(J[0],true);
- TestJSON(J,'[null]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestAddArray;
- Var
- J,J2 : TJSONArray;
- begin
- J:=TJSonArray.Create;
- try
- J2:=TJSonArray.Create;
- J2.Add(0);
- J2.Add(1);
- J.Add(J2);
- TestItemCount(J,1);
- TestJSONType(J[0],jtArray);
- AssertEquals('J[0] is TJSONArray',TJSONArray,J[0].ClassType);
- AssertEquals('J.Arrays[0] is TJSONArray',TJSONArray,J.Arrays[0].ClassType);
- TestAsInteger(J.Arrays[0][0],0);
- TestAsInteger(J.Arrays[0][1],1);
- TestAsInt64(J.Arrays[0][0],0);
- TestAsInt64(J.Arrays[0][1],1);
- TestAsQword(J.Arrays[0][0],0);
- TestAsQword(J.Arrays[0][1],1);
- TestJSON(J,'[[0, 1]]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestInsertInteger;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(Integer(1));
- J.Insert(0,Integer(0));
- TestItemCount(J,2);
- TestJSONType(J[0],jtNumber);
- AssertEquals('J[0] is TJSONIntegerNumber',J[0].ClassType,TJSONIntegerNumber);
- AssertEquals('j.Types[0]=jtNumber',ord(J.Types[0]),Ord(jtNumber));
- AssertEquals('J.Integers[0]=0',0,J.integers[0]);
- TestAsInteger(J[0],0);
- TestAsInt64(J[0],0);
- TestAsQword(J[0],0);
- TestJSON(J,'[0, 1]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestInsertInt64;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(Int64(1));
- J.Insert(0,Int64(0));
- TestItemCount(J,2);
- TestJSONType(J[0],jtNumber);
- AssertEquals('J[0] is TJSONInt64Number',J[0].ClassType,TJSONInt64Number);
- AssertEquals('j.Types[0]=jtNumber',ord(J.Types[0]),Ord(jtNumber));
- AssertEquals('J.Int64s[0]=0',0,J.Int64s[0]);
- TestAsInteger(J[0],0);
- TestAsInt64(J[0],0);
- TestAsQword(J[0],0);
- TestJSON(J,'[0, 1]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestInsertFloat;
- Var
- J : TJSONArray;
- S,S2 : String;
- F : TJSONFloat;
- begin
- F:=1.2;
- J:=TJSonArray.Create;
- try
- J.Add(2.3);
- J.Insert(0,F);
- TestItemCount(J,2);
- TestJSONType(J[0],jtNumber);
- AssertEquals('J[0] is TJSONFloatNumber',TJSONfloatNumber,J[0].ClassType);
- AssertEquals('j.Types[0]=jtNumber',Ord(jtNumber),ord(J.Types[0]));
- AssertEquals('J.Floats[0]='+FloatToStr(F),F,J.Floats[0]);
- TestAsFloat(J[0],F);
- Str(F,S);
- Delete(S,1,1);
- F:=2.3;
- Str(F,S2);
- Delete(S2,1,1);
- TestJSON(J,'['+S+', '+S2+']');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestInsertBooleanTrue;
- begin
- TestInsertBoolean(True);
- end;
- procedure TTestArray.TestInsertBooleanFalse;
- begin
- TestInsertBoolean(False);
- end;
- procedure TTestArray.TestInsertString;
- Var
- J : TJSONArray;
- S : String;
- F : TJSONFloat;
- begin
- S:='A string';
- J:=TJSonArray.Create;
- try
- J.Add('Another string');
- J.Insert(0,S);
- TestItemCount(J,2);
- TestJSONType(J[0],jtString);
- AssertEquals('J[0] is TJSONString',TJSONString,J[0].ClassType);
- TestAsString(J[0],S);
- AssertEquals('J.Strings[0]="'+S+'"',S,J.Strings[0]);
- TestJSON(J,'["'+StringToJSONString(S)+'", "Another string"]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestInsertNull;
- Var
- J : TJSONArray;
- S : String;
- F : TJSONFloat;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(123);
- J.Insert(0);
- TestItemCount(J,2);
- TestJSONType(J[0],jtNull);
- AssertEquals('J[0] is TJSONNull',TJSONNull,J[0].ClassType);
- AssertEquals('J.Nulls[0]=True',True,J.Nulls[0]);
- TestIsNull(J[0],true);
- TestJSON(J,'[null, 123]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestInsertObject;
- Const
- A = 'a';
- B = 'b';
- Var
- J : TJSONArray;
- J2 : TJSONObject;
- begin
- J:=TJSonArray.Create;
- try
- J.Add('A string');
- J2:=TJSonObject.Create;
- J2.Add(A,0);
- J2.Add(B,1);
- J.Insert(0,J2);
- TestItemCount(J,2);
- TestJSONType(J[0],jtObject);
- AssertEquals('J[0] is TJSONObject',TJSONObject,J[0].ClassType);
- AssertEquals('J.Objects[0] is TJSONObject',TJSONObject,J.Objects[0].ClassType);
- TestAsInteger(J.Objects[0][A],0);
- TestAsInteger(J.Objects[0][B],1);
- TestAsInt64(J.Objects[0][A],0);
- TestAsInt64(J.Objects[0][B],1);
- TestAsQword(J.Objects[0][A],0);
- TestAsQword(J.Objects[0][B],1);
- TestJSON(J,'[{ "a" : 0, "b" : 1 }, "A string"]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestInsertArray;
- Var
- J,J2 : TJSONArray;
- begin
- J:=TJSonArray.Create;
- try
- J.Add('Something nice');
- J2:=TJSonArray.Create;
- J2.Add(0);
- J2.Add(1);
- J.Insert(0,J2);
- TestItemCount(J,2);
- TestJSONType(J[0],jtArray);
- AssertEquals('J[0] is TJSONArray',TJSONArray,J[0].ClassType);
- AssertEquals('J.Arrays[0] is TJSONArray',TJSONArray,J.Arrays[0].ClassType);
- TestAsInteger(J.Arrays[0][0],0);
- TestAsInteger(J.Arrays[0][1],1);
- TestAsInt64(J.Arrays[0][0],0);
- TestAsInt64(J.Arrays[0][1],1);
- TestAsQWord(J.Arrays[0][0],0);
- TestAsQWord(J.Arrays[0][1],1);
- TestJSON(J,'[[0, 1], "Something nice"]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestMove;
- Var
- J : TJSONArray;
- S : String;
- F : TJSONFloat;
- begin
- S:='A string';
- J:=TJSonArray.Create;
- try
- J.Add('First string');
- J.Add('Second string');
- J.Add('Third string');
- J.Move(2,1);
- TestItemCount(J,3);
- AssertEquals('J[2] is TJSONString',TJSONString,J[1].ClassType);
- AssertEquals('J[1] is TJSONString',TJSONString,J[2].ClassType);
- TestAsString(J[1],'Third string');
- TestAsString(J[2],'Second string');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestExchange;
- Var
- J : TJSONArray;
- S : String;
- F : TJSONFloat;
- begin
- S:='A string';
- J:=TJSonArray.Create;
- try
- J.Add('First string');
- J.Add('Second string');
- J.Add('Third string');
- J.Exchange(2,0);
- TestItemCount(J,3);
- AssertEquals('J[2] is TJSONString',TJSONString,J[0].ClassType);
- AssertEquals('J[1] is TJSONString',TJSONString,J[2].ClassType);
- TestAsString(J[0],'Third string');
- TestAsString(J[2],'First string');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestAddObject;
- Const
- A = 'a';
- B = 'b';
-
- Var
- J : TJSONArray;
- J2 : TJSONObject;
- begin
- J:=TJSonArray.Create;
- try
- J2:=TJSonObject.Create;
- J2.Add(A,0);
- J2.Add(B,1);
- J.Add(J2);
- TestItemCount(J,1);
- TestJSONType(J[0],jtObject);
- AssertEquals('J[0] is TJSONObject',TJSONObject,J[0].ClassType);
- AssertEquals('J.Objects[0] is TJSONObject',TJSONObject,J.Objects[0].ClassType);
- TestAsInteger(J.Objects[0][A],0);
- TestAsInteger(J.Objects[0][B],1);
- TestAsInt64(J.Objects[0][A],0);
- TestAsInt64(J.Objects[0][B],1);
- TestAsQword(J.Objects[0][A],0);
- TestAsQword(J.Objects[0][B],1);
- TestJSON(J,'[{ "a" : 0, "b" : 1 }]');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestDelete;
- Var
- J : TJSONArray;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(0);
- J.Add(1);
- TestItemCount(J,2);
- TestJSONType(J[0],jtNumber);
- TestJSONType(J[1],jtNumber);
- TestJSON(J,'[0, 1]');
- J.Delete(1);
- TestItemCount(J,1);
- J.Delete(0);
- TestItemCount(J,0);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestRemove;
- Var
- J : TJSONArray;
- I : TJSONData;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(0);
- J.Add(1);
- J.Add(2);
- TestItemCount(J,3);
- TestJSONType(J[0],jtNumber);
- TestJSONType(J[1],jtNumber);
- TestJSONType(J[2],jtNumber);
- TestJSON(J,'[0, 1, 2]');
- I:=J[1];
- J.Remove(I);
- TestItemCount(J,2);
- TestAsInteger(J[0],0);
- TestAsInteger(J[1],2);
- TestAsInt64(J[0],0);
- TestAsInt64(J[1],2);
- TestAsQWord(J[0],0);
- TestAsQWord(J[1],2);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestClone;
- Var
- J,J2 : TJSONArray;
- D : TJSONData;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(1);
- J.Add('aloha');
- D:=J.Clone;
- try
- TestJSONType(D,jtArray);
- J2:=TJSonArray(D);
- TestItemCount(J2,2);
- TestJSONType(J2[0],jtNumber);
- TestJSONType(J2[1],jtString);
- TestAsInteger(J2[0],1);
- TestAsString(J2[1],'aloha');
- finally
- D.Free;
- end;
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestMyClone;
- Var
- J,J2 : TMyArray;
- D : TJSONData;
- begin
- J:=TMyArray.Create;
- try
- J.Add(1);
- J.Add('aloha');
- D:=J.Clone;
- try
- TestJSONType(D,jtArray);
- AssertEquals('Correct class',TMyArray,D.ClassType);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestArray.TestFormat;
- Var
- J : TJSONArray;
- I : TJSONData;
- begin
- J:=TJSonArray.Create;
- try
- J.Add(0);
- J.Add(1);
- J.Add(2);
- TestItemCount(J,3);
- TestJSONType(J[0],jtNumber);
- TestJSONType(J[1],jtNumber);
- TestJSONType(J[2],jtNumber);
- TestJSON(J,'[0, 1, 2]');
- AssertEquals('FormatJSON, single line',J.AsJSON,J.FormatJSON([foSingleLineArray],1));
- AssertEquals('FormatJSON, default','['+sLinebreak+' 0,'+sLinebreak+' 1,'+sLinebreak+' 2'+sLinebreak+']',J.FormatJSON());
- AssertEquals('FormatJSON, use tab','['+sLinebreak+#9'0,'+sLinebreak+#9'1,'+sLinebreak+#9'2'+sLinebreak+']',J.FormatJSON([foUseTabChar],1));
- J.Add(TJSONObject.Create(['x',1,'y',2]));
- AssertEquals('FormatJSON, use tab indentsize 1','['+sLinebreak+#9'0,'+sLinebreak+#9'1,'+sLinebreak+#9'2,'+sLinebreak+#9'{'+sLineBreak+#9#9'"x" : 1,'+sLineBreak+#9#9'"y" : 2'+sLinebreak+#9'}'+sLineBreak+']',J.FormatJSON([foUseTabChar],1));
- finally
- J.Free
- end;
- end;
- { TTestObject }
- procedure TTestObject.TestCreate;
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create;
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,0);
- TestJSON(J,'{}');
- TestIsNull(J,False);
- TestAsBoolean(J,False,True);
- TestAsInteger(J,1,True);
- TestAsInt64(J,1,True);
- TestAsQword(J,1,True);
- TestAsString(J,'',True);
- TestAsFloat(J,0.0,True);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAddInteger;
- Const
- A = 'a';
- Var
- J : TJSONObject;
- begin
- J:=TJSonObject.Create;
- try
- J.Add(A,Integer(0));
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- AssertEquals('J[''a''] is TJSONIntegerNumber',J[A].ClassType,TJSONIntegerNumber);
- AssertEquals('j.Types[''a'']=jtNumber',ord(J.Types[A]),Ord(jtNumber));
- AssertEquals('J.Integers[''a'']=0',0,J.integers[A]);
- TestAsInteger(J[A],0);
- TestAsInt64(J[A],0);
- TestAsQword(J[A],0);
- TestJSON(J,'{ "'+A+'" : 0 }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAddInt64;
- Const
- A = 'a';
- Var
- J : TJSONObject;
- begin
- J:=TJSonObject.Create;
- try
- J.Add(A,Int64(0));
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- AssertEquals('J[''a''] is TJSONInt64Number',J[A].ClassType,TJSONInt64Number);
- AssertEquals('j.Types[''a'']=jtNumber',ord(J.Types[A]),Ord(jtNumber));
- AssertEquals('J.Int64s[''a'']=0',0,J.Int64s[A]);
- TestAsInteger(J[A],0);
- TestAsInt64(J[A],0);
- TestAsQword(J[A],0);
- TestJSON(J,'{ "'+A+'" : 0 }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAddFloat;
- Const
- A = 'a';
- Var
- J : TJSONObject;
- S : String;
- F : TJSONFloat;
- begin
- F:=1.2;
- J:=TJSonObject.Create;
- try
- J.Add(A,F);
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- AssertEquals('J[''a''] is TJSONFloatNumber',TJSONfloatNumber,J[a].ClassType);
- AssertEquals('j.Types[''a'']=jtNumber',Ord(jtNumber),ord(J.Types[a]));
- AssertEquals('J.Floats[''a'']='+FloatToStr(F),F,J.Floats[a]);
- TestAsFloat(J[A],F);
- Str(F,S);
- TestJSON(J,'{ "'+a+'" :'+S+' }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAddBoolean(B : Boolean);
- Const
- A = 'a';
-
- Var
- J : TJSONObject;
- begin
- B:=True;
- J:=TJSonObject.Create;
- try
- J.Add(A,B);
- TestItemCount(J,1);
- TestJSONType(J[A],jtBoolean);
- AssertEquals('J[''a''] is TJSONBoolean',TJSONBoolean,J[a].ClassType);
- TestAsBoolean(J[a],B);
- AssertEquals('J.Booleans[''a'']='+BoolToStr(B)+'"',B,J.Booleans[a]);
- If B then
- TestJSON(J,'{ "'+a+'" : true }')
- else
- TestJSON(J,'{ "'+a+'" : false }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAccessError;
- Var
- J : TJSONObject;
- begin
- J:=TJSonObject.Create;
- try
- J.Strings['NonExist'];
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAddBooleanTrue;
- begin
- TestAddBoolean(True);
- end;
- procedure TTestObject.TestAddBooleanFalse;
- begin
- TestAddBoolean(False);
- end;
- procedure TTestObject.TestAddString;
- Const
- A = 'a';
- Var
- J : TJSONObject;
- S : String;
- F : TJSONFloat;
- begin
- S:='A string';
- J:=TJSonObject.Create;
- try
- J.Add(A,S);
- TestItemCount(J,1);
- TestJSONType(J[a],jtString);
- AssertEquals('J[''a''] is TJSONString',TJSONString,J[A].ClassType);
- TestAsString(J[a],S);
- AssertEquals('J.Strings[''a'']="'+S+'"',S,J.Strings[A]);
- TestJSON(J,'{ "'+a+'" : "'+StringToJSONString(S)+'" }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAddNull;
- Const
- A = 'a';
- Var
- J : TJSONObject;
- S : String;
- F : TJSONFloat;
- begin
- J:=TJSonObject.Create;
- try
- J.Add(a);
- TestItemCount(J,1);
- TestJSONType(J[a],jtNull);
- AssertEquals('J[''a''] is TJSONNull',TJSONNull,J[A].ClassType);
- AssertEquals('J.Nulls[''a'']=True',True,J.Nulls[A]);
- TestIsNull(J[a],true);
- TestJSON(J,'{ "'+a+'" : null }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAddObject;
- Const
- A = 'a';
- B = 'b';
- C = 'c';
- Var
- J,J2 : TJSONObject;
- begin
- J:=TJSonObject.Create;
- try
- J2:=TJSonObject.Create;
- J2.Add(B,0);
- J2.Add(C,1);
- J.Add(A,J2);
- TestItemCount(J,1);
- TestJSONType(J[A],jtObject);
- AssertEquals('J[''a''] is TJSONObject',TJSONObject,J[A].ClassType);
- AssertEquals('J.Objects[''a''] is TJSONObject',TJSONObject,J.Objects[A].ClassType);
- TestAsInteger(J.Objects[A][B],0);
- TestAsInteger(J.Objects[A][C],1);
- TestAsInt64(J.Objects[A][B],0);
- TestAsInt64(J.Objects[A][C],1);
- TestAsQword(J.Objects[A][B],0);
- TestAsQword(J.Objects[A][C],1);
- TestJSON(J,'{ "a" : { "b" : 0, "c" : 1 } }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestAddArray;
- Const
- A = 'a';
- Var
- J : TJSONObject;
- J2 : TJSONArray;
- begin
- J:=TJSONObject.Create;
- try
- J2:=TJSonArray.Create;
- J2.Add(0);
- J2.Add(1);
- J.Add(A,J2);
- TestItemCount(J,1);
- TestJSONType(J[A],jtArray);
- AssertEquals('J[''a''] is TJSONArray',TJSONArray,J[A].ClassType);
- AssertEquals('J.Arrays[0] is TJSONArray',TJSONArray,J.Arrays[A].ClassType);
- TestAsInteger(J.Arrays[A][0],0);
- TestAsInteger(J.Arrays[A][1],1);
- TestAsInt64(J.Arrays[A][0],0);
- TestAsInt64(J.Arrays[A][1],1);
- TestAsQword(J.Arrays[A][0],0);
- TestAsQword(J.Arrays[A][1],1);
- TestJSON(J,'{ "a" : [0, 1] }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestDelete;
- Const
- A = 'a';
- B = 'b';
-
- Var
- J : TJSONObject;
- begin
- J:=TJSonObject.Create;
- try
- J.Add(A,0);
- J.Add(B,1);
- TestItemCount(J,2);
- TestJSONType(J[A],jtNumber);
- TestJSONType(J[A],jtNumber);
- TestJSON(J,'{ "a" : 0, "b" : 1 }');
- J.Delete(1);
- TestItemCount(J,1);
- J.Delete(0);
- TestItemCount(J,0);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestRemove;
- Const
- A = 'a';
- B = 'b';
- C = 'c';
-
- Var
- J : TJSONObject;
- I : TJSONData;
- begin
- J:=TJSonObject.Create;
- try
- J.Add(A,1);
- J.Add(B,2);
- J.Add(C,3);
- TestItemCount(J,3);
- TestJSONType(J[A],jtNumber);
- TestJSONType(J[B],jtNumber);
- TestJSONType(J[C],jtNumber);
- TestJSON(J,'{ "a" : 1, "b" : 2, "c" : 3 }');
- I:=J[b];
- J.Remove(I);
- TestItemCount(J,2);
- TestAsInteger(J[a],1);
- TestAsInteger(J[c],3);
- TestAsInt64(J[a],1);
- TestAsInt64(J[c],3);
- TestAsQword(J[a],1);
- TestAsQword(J[c],3);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestClone;
- Var
- J,J2 : TJSONObject;
- D : TJSONData;
- begin
- J:=TJSonObject.Create;
- try
- J.Add('p1',1);
- J.Add('p2','aloha');
- D:=J.Clone;
- try
- TestJSONType(D,jtObject);
- J2:=TJSonObject(D);
- TestItemCount(J2,2);
- TestJSONType(J2['p1'],jtNumber);
- TestJSONType(J2['p2'],jtString);
- TestAsInteger(J2['p1'],1);
- TestAsString(J2['p2'],'aloha');
- finally
- D.Free;
- end;
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestMyClone;
- Var
- J : TMyObject;
- D : TJSONData;
- begin
- J:=TMyObject.Create;
- try
- J.Add('p1',1);
- J.Add('p2','aloha');
- D:=J.Clone;
- try
- TestJSONType(D,jtObject);
- AssertEquals('Correct class',TMYObject,D.ClassType);
- finally
- D.Free;
- end;
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestExtract;
- Const
- A = 'a';
- B = 'b';
- Var
- J : TJSONObject;
- JA,JB : TJSONData;
- E : TJSONData;
- begin
- J:=TJSonObject.Create;
- try
- J.Add(A,0);
- J.Add(B,1);
- TestItemCount(J,2);
- JA:=J[A];
- JB:=J[B];
- TestJSONType(JA,jtNumber);
- TestJSONType(JB,jtNumber);
- TestJSON(J,'{ "a" : 0, "b" : 1 }');
- E:=J.Extract(1);
- AssertSame('Extracted JA',JB,E);
- E.Free;
- TestItemCount(J,1);
- E:=J.Extract(0);
- AssertSame('Extracted JB',JA,E);
- E.Free;
- TestItemCount(J,0);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestNonExistingAccessError;
- begin
- AssertException(EJSON,@TestAccessError);
- end;
- procedure TTestObject.TestFormat;
- Var
- O : TJSONObject;
- begin
- O:=TJSONObject.Create(['x',1,'y',2]);
- try
- TestJSON(O,'{ "x" : 1, "y" : 2 }');
- AssertEquals('Format equals JSON',O.AsJSON,O.FormatJSON([foSingleLineObject]));
- AssertEquals('Format using SkipWhiteSpace','{"x":1,"y":2}',O.FormatJSON([foSingleLineObject,foSkipWhiteSpace]));
- AssertEquals('Format using SkipWhiteSpace,unquotednames','{x:1,y:2}',O.FormatJSON([foSingleLineObject,foSkipWhiteSpace,foDoNotQuoteMembers]));
- AssertEquals('Format 1','{'+sLineBreak+' "x" : 1,'+sLineBreak+' "y" : 2'+sLineBreak+'}',O.FormatJSON([]));
- AssertEquals('Format 1','{'+sLineBreak+' x : 1,'+sLineBreak+' y : 2'+sLineBreak+'}',O.FormatJSON([foDoNotQuoteMembers]));
- AssertEquals('Format 1','{'+sLineBreak+#9'x : 1,'+sLineBreak+#9'y : 2'+sLineBreak+'}',O.FormatJSON([foUseTabChar,foDoNotQuoteMembers],1));
- O.Add('s',TJSONObject.Create(['w',10,'h',20]));
- AssertEquals('Format 1','{'+sLineBreak+#9'x : 1,'+sLineBreak+#9'y : 2,'+sLineBreak+#9's : {'+sLineBreak+#9#9'w : 10,'+sLineBreak+#9#9'h : 20'+sLineBreak+#9'}'+sLineBreak+'}',O.FormatJSON([foUseTabChar,foDoNotQuoteMembers],1));
- finally
- O.Free;
- end;
- end;
- procedure TTestObject.TestFind;
- Const
- A = 'A';
- S = 'A string';
- B = 'a';
- S2 = 'Another string';
- C = 'c';
- S3 = 'Yet Another string';
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,S,B,S2,C,S3]);
- try
- TestJSONType(J,jtObject);
- TestIsNull(J,False);
- TestItemCount(J,3);
- TestJSONType(J[A],jtString);
- TestJSONType(J[B],jtString);
- TestJSON(J,'{ "A" : "'+S+'", "a" : "'+S2+'", "c" : "'+S3+'" }');
- AssertEquals('Nonexisting, case sensitive',-1,J.IndexOfName('D'));
- AssertEquals('Nonexisting, case insensitive',-1,J.IndexOfName('D',True));
- AssertEquals('1 Existing , case sensitive',0,J.IndexOfName(A));
- AssertEquals('2 Existing exact match, case insensitive',0,J.IndexOfName(A,true));
- AssertEquals('3 Existing , case sensitive',1,J.IndexOfName(B));
- AssertEquals('4 Existing exact match, case insensitive',1,J.IndexOfName(B,true));
- AssertEquals('5 Existing , case sensitive again',2,J.IndexOfName(C));
- AssertEquals('6 Existing case-insensitive match, case insensitive',2,J.IndexOfName(Uppercase(C),true));
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateString;
- Const
- A = 'A';
- S = 'A string';
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtString);
- TestJSON(J,'{ "A" : "'+S+'" }');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateStringUnquoted;
- Const
- A = 'A';
- S = 'A string';
- Var
- J : TJSONObject;
- begin
- TJSONObject.UnquotedMemberNames:=True;
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtString);
- TestJSON(J,'{ A : "'+S+'" }');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreatePchar;
- Const
- A = 'A';
- S = 'A string';
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,Pchar(S)]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtString);
- TestJSON(J,'{ "A" : "'+S+'" }');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreatePcharUnquoted;
- Const
- A = 'A';
- S = 'A string';
- Var
- J : TJSONObject;
- begin
- TJSONObject.UnQuotedMemberNames:=True;
- J:=TJSONObject.Create([A,Pchar(S)]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtString);
- TestJSON(J,'{ A : "'+S+'" }');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateStrings;
- Const
- A = 'A';
- B = 'B';
- S = 'A string';
- T = 'B string';
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,S,B,T]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,2);
- TestJSONType(J[A],jtString);
- TestJSONType(J[B],jtString);
- TestJSON(J,'{ "A" : "'+S+'", "B" : "'+T+'" }');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateStringsCompressed;
- Const
- A = 'A';
- B = 'B';
- S = 'A string';
- T = 'B string';
- Var
- J : TJSONObject;
- begin
- TJSONData.CompressedJSON:=True;
- J:=TJSONObject.Create([A,S,B,T]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,2);
- TestJSONType(J[A],jtString);
- TestJSONType(J[B],jtString);
- TestJSON(J,'{"A":"'+S+'","B":"'+T+'"}');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateStringsCompressedUnquoted;
- Const
- A = 'A';
- B = 'B';
- S = 'A string';
- T = 'B string';
- Var
- J : TJSONObject;
- begin
- TJSONData.CompressedJSON:=True;
- TJSONObject.UnQuotedMemberNames:=True;
- J:=TJSONObject.Create([A,S,B,T]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,2);
- TestJSONType(J[A],jtString);
- TestJSONType(J[B],jtString);
- TestJSON(J,'{A:"'+S+'",B:"'+T+'"}');
- TestIsNull(J,False);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateInteger;
- Const
- A = 'A';
- S = 3;
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- TestJSON(J,'{ "A" : 3 }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateIntegerUnquoted;
- Const
- A = 'A';
- S = 3;
- Var
- J : TJSONObject;
- begin
- TJSONObject.UnQuotedMemberNames:=True;
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- TestJSON(J,'{ A : 3 }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateFloat;
- Const
- A = 'A';
- S : double = 1.2;
- Var
- J : TJSONObject;
- r : String;
- begin
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- Str(S,R);
- TestJSON(J,'{ "A" :'+R+' }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateFloatUnquoted;
- Const
- A = 'A';
- S : double = 1.2;
- Var
- J : TJSONObject;
- r : String;
- begin
- TJSONObject.UnQuotedMemberNames:=True;
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- Str(S,R);
- TestJSON(J,'{ A :'+R+' }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateInt64;
- Const
- A = 'A';
- S : Int64 = $FFFFFFFFFFFFF;
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- TestJSON(J,'{ "A" : '+IntToStr(S)+' }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateInt64Unquoted;
- Const
- A = 'A';
- S : Int64 = $FFFFFFFFFFFFF;
- Var
- J : TJSONObject;
- begin
- TJSONObject.UnQuotedMemberNames:=True;
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtNumber);
- TestJSON(J,'{ A : '+IntToStr(S)+' }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateBoolean;
- Const
- A = 'A';
- S = True;
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtBoolean);
- TestJSON(J,'{ "A" : true }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateBooleanUnquoted;
- Const
- A = 'A';
- S = True;
- Var
- J : TJSONObject;
- begin
- TJSONObject.UnQuotedMemberNames:=True;
- J:=TJSONObject.Create([A,S]);
- try
- TestJSONType(J,jtObject);
- TestItemCount(J,1);
- TestJSONType(J[A],jtBoolean);
- TestJSON(J,'{ A : true }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateJSONObject;
- Const
- A = 'A';
-
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,TJSONObject.Create]);
- try
- TestItemCount(J,1);
- TestJSONType(J[A],jtObject);
- TestJSON(J,'{ "A" : {} }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateJSONObjectUnquoted;
- Const
- A = 'A';
- Var
- J : TJSONObject;
- begin
- TJSONObject.UnQuotedMemberNames:=True;
- J:=TJSONObject.Create([A,TJSONObject.Create]);
- try
- TestItemCount(J,1);
- TestJSONType(J[A],jtObject);
- TestJSON(J,'{ A : {} }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateJSONString;
- Const
- A = 'A';
- S = 'A string';
- Var
- J : TJSONObject;
- begin
- J:=TJSONObject.Create([A,TJSONString.Create(S)]);
- try
- TestItemCount(J,1);
- TestJSONType(J[A],jtString);
- TestJSON(J,'{ "A" : "'+S+'" }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateJSONStringUnquoted;
- Const
- A = 'A';
- S = 'A string';
- Var
- J : TJSONObject;
- begin
- TJSONObject.UnQuotedMemberNames:=True;
- J:=TJSONObject.Create([A,TJSONString.Create(S)]);
- try
- TestItemCount(J,1);
- TestJSONType(J[A],jtString);
- TestJSON(J,'{ A : "'+S+'" }');
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreateObject;
- Const
- A = 'A';
- Var
- J : TJSONObject;
- O : TObject;
- begin
- J:=Nil;
- try
- Try
- O:=TObject.Create;
- J:=TJSONObject.Create([A,O]);
- Fail('Array constructor accepts only TJSONData');
- finally
- FreeAndNil(J);
- FreeAndNil(O);
- end;
- except
- // Should be OK.
- end;
- end;
- procedure TTestObject.TestCreateNilPointer;
- Const
- A = 'A';
- Var
- J : TJSONObject;
- P : Pointer;
- begin
- J:=Nil;
- P:=Nil;
- Try
- J:=TJSONObject.Create([A,P]);
- TestJSONType(J[A],jtNull);
- finally
- FreeAndNil(J);
- end;
- end;
- procedure TTestObject.TestCreatePointer;
- Const
- A = 'A';
- Var
- J : TJSONObject;
- P : Pointer;
- begin
- J:=Nil;
- P:=@Self;
- try
- Try
- J:=TJSONObject.Create([A,P]);
- Fail('Array constructor accepts only NIL pointers');
- finally
- FreeAndNil(J);
- end;
- except
- // Should be OK.
- end;
- end;
- { TTestJSONString }
- procedure TTestJSONString.TestTo(const Src, Dest: String);
- Var
- S : String;
- begin
- S:='StringToJSONString('''+Src+''')='''+Dest+'''';
- AssertEquals(S,Dest,StringToJSONString(Src));
- end;
- procedure TTestJSONString.TestFrom(const Src, Dest: String);
- Var
- S : String;
- begin
- S:='JSONStringToString('''+Src+''')='''+Dest+'''';
- AssertEquals(S,Dest,JSONStringToString(Src));
- end;
- procedure TTestJSONString.TestJSONStringToString;
- begin
- TestFrom('','');
- TestFrom('A','A');
- TestFrom('AB','AB');
- TestFrom('ABC','ABC');
- TestFrom('\\','\');
- TestFrom('\/','/');
- TestFrom('\"','"');
- TestFrom('\b',#8);
- TestFrom('\t',#9);
- TestFrom('\n',#10);
- TestFrom('\f',#12);
- TestFrom('\r',#13);
- TestFrom('\bBC',#8'BC');
- TestFrom('\tBC',#9'BC');
- TestFrom('\nBC',#10'BC');
- TestFrom('\fBC',#12'BC');
- TestFrom('\rBC',#13'BC');
- TestFrom('A\b','A'#8);
- TestFrom('A\t','A'#9);
- TestFrom('A\n','A'#10);
- TestFrom('A\f','A'#12);
- TestFrom('A\r','A'#13);
- TestFrom('A\bBC','A'#8'BC');
- TestFrom('A\tBC','A'#9'BC');
- TestFrom('A\nBC','A'#10'BC');
- TestFrom('A\fBC','A'#12'BC');
- TestFrom('A\rBC','A'#13'BC');
- TestFrom('\\\\','\\');
- TestFrom('\/\/','//');
- TestFrom('\"\"','""');
- TestFrom('\b\b',#8#8);
- TestFrom('\t\t',#9#9);
- TestFrom('\n\n',#10#10);
- TestFrom('\f\f',#12#12);
- TestFrom('\r\r',#13#13);
- end;
- procedure TTestJSONString.TestStringToJSONString;
- begin
- TestTo('','');
- TestTo('A','A');
- TestTo('AB','AB');
- TestTo('ABC','ABC');
- TestTo('\','\\');
- TestTo('/','\/');
- TestTo('"','\"');
- TestTo(#8,'\b');
- TestTo(#9,'\t');
- TestTo(#10,'\n');
- TestTo(#12,'\f');
- TestTo(#13,'\r');
- TestTo(#8'BC','\bBC');
- TestTo(#9'BC','\tBC');
- TestTo(#10'BC','\nBC');
- TestTo(#12'BC','\fBC');
- TestTo(#13'BC','\rBC');
- TestTo('A'#8,'A\b');
- TestTo('A'#9,'A\t');
- TestTo('A'#10,'A\n');
- TestTo('A'#12,'A\f');
- TestTo('A'#13,'A\r');
- TestTo('A'#8'BC','A\bBC');
- TestTo('A'#9'BC','A\tBC');
- TestTo('A'#10'BC','A\nBC');
- TestTo('A'#12'BC','A\fBC');
- TestTo('A'#13'BC','A\rBC');
- TestTo('\\','\\\\');
- TestTo('//','\/\/');
- TestTo('""','\"\"');
- TestTo(#8#8,'\b\b');
- TestTo(#9#9,'\t\t');
- TestTo(#10#10,'\n\n');
- TestTo(#12#12,'\f\f');
- TestTo(#13#13,'\r\r');
- end;
- initialization
- RegisterTest(TTestJSONString);
- RegisterTest(TTestNull);
- RegisterTest(TTestBoolean);
- RegisterTest(TTestInteger);
- RegisterTest(TTestInt64);
- RegisterTest(TTestQWord);
- RegisterTest(TTestFloat);
- RegisterTest(TTestString);
- RegisterTest(TTestArray);
- RegisterTest(TTestObject);
- RegisterTest(TTestJSONPath);
- RegisterTest(TTestFactory);
- RegisterTest(TTestIterator);
- end.
|