1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422 |
- unit tcjsontocode;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, fpcunit, testutils, testregistry, fpjsontopas;
- type
- { TTestGenCode }
- TTestGenCode= class(TTestCase)
- private
- FPos : Integer;
- FGen: TJSONToPascal;
- procedure AssertDelphiLoadArray(AElementType, AJSONtype: String);
- procedure AssertDelphiPropertyAssignmentLoop;
- procedure AssertDestructorImplementation(AClassName: String; ObjectFields: array of string);
- procedure AssertLine(Msg: String; AExpected: String);
- procedure GenCode(AJSON: String);
- class function GetDataName(IsDelphi: Boolean): string;
- function NextLine: String;
- function Pos(const What, Where: String): Integer;
- protected
- procedure SetUp; override;
- procedure TearDown; override;
- procedure AssertArrayCreator(const ArrayTypeName, AElementType: String; IsDelphi: Boolean=False);
- procedure AssertArraySaver(const ArrayTypeName, AElementType: String; IsDelphi: Boolean=False);
- procedure AssertArrayCreatorImplementation(const ArrayTypeName, AElementType: String; AObjectName: String=''; IsDelphi: Boolean=False);
- procedure AssertArraySaverImplementation(const ArrayTypeName, AElementType: String; AObjectName: String=''; IsDelphi: Boolean=False);
- procedure AssertLoadArray(AElementType, AJSONtype: String; IsDelphi : Boolean = False);
- procedure AssertSaveArray(AElementType, AJSONtype: String; IsDelphi: Boolean = False);
- procedure AssertPropertyAssignmentLoop;
- procedure AssertType;
- procedure AssertClassComment(const Msg, AName: String);
- procedure AssertLoadConstructorDeclaration(AType: String);
- procedure AssertLoaderDeclaration(AType: String);
- procedure AssertSaverDeclaration;
- procedure AssertLoaderImplementationEnd(IsDelphi : Boolean = False);
- procedure AssertLoadConstructorImplementationStart(Const ATypeName, ADataName: String);
- procedure AssertLoaderImplementationStart(Const ATypeName, ADataName: String; IsDelphi : Boolean = False);
- procedure AssertSaverImplementationStart(Const ATypeName: String; IsDelphi : Boolean = False);
- procedure AssertArrayLoaderImplementationStart(Const ATypeName, ADataName, ArrayName, ArrayTypeName, ArrayElementType : String; IsDelphi : Boolean = False);
- procedure AssertObjectLoaderImplementationStart(Const ATypeName, ADataName, ArrayName, ArrayTypeName, ArrayElementType : String; IsDelphi : Boolean = False);
- Procedure AssertUnitHeader;
- Procedure AssertBegin;
- Procedure AssertEnd(Const Msg : String = '');
- Procedure AssertUnitEnd;
- Procedure AssertImplementation;
- procedure AssertProperty(const AName, AType: String; Setter : Boolean = False);
- procedure AssertSetter(const AName, AType: String);
- Procedure AssertClassHeader(Const AName : String; AParentName : String);
- Procedure AssertSetterImplementation(Const AClassType,AName,AType : String; IsObject : Boolean = False);
- Procedure AssertVisibility(Const AVisibility : String);
- Procedure AssertDestructor;
- Procedure AssertField(Const AName,AType : String; Prefix : String = '');
- Procedure AssertArrayType(Const AName,AItemType : String);
- Procedure AssertPropertyMap(Const APath,ATypeName,APropertyName,AParentTypeName : String);
- Property Gen : TJSONToPascal Read FGen;
- published
- procedure TestEmpty;
- Procedure TestSimple;
- Procedure TestClassName;
- Procedure TestParentClassName;
- Procedure TestIntegerProperty;
- Procedure Test2IntegersProperty;
- Procedure TestBooleanProperty;
- Procedure TestStringProperty;
- Procedure TestFloatProperty;
- Procedure TestInt64Property;
- Procedure TestPropertySetter;
- Procedure TestObjectProperty;
- Procedure TestObjectPropertySetter;
- Procedure TestObjectPropertySuffix;
- Procedure TestObjectPropertySkip;
- Procedure TestObjectPropertyRecurse;
- Procedure TestObjectPropertyRecurseSuffix;
- Procedure TestObjectPropertyRecurseSkip;
- Procedure TestObjectPropertyRecurseSkipB;
- Procedure TestStringArrayProperty;
- Procedure TestIntegerArrayProperty;
- Procedure TestBooleanArrayProperty;
- Procedure TestFloatArrayProperty;
- Procedure TestInt64ArrayProperty;
- Procedure TestStringArrayPropertySuffix;
- Procedure TestObjectArrayProperty;
- procedure TestObjectArrayPropertySuffix;
- procedure TestArrayArrayProperty;
- procedure TestObjectArrayArrayProperty;
- Procedure TestLoadIntegerProperty;
- Procedure TestLoad2IntegersProperty;
- Procedure TestLoadIntegerWithErrorProperty;
- Procedure TestLoadIntegerCaseInsensitiveProperty;
- Procedure TestLoadStringProperty;
- Procedure TestLoadBooleanProperty;
- Procedure TestLoadInt64Property;
- Procedure TestLoadFloatProperty;
- Procedure TestLoadObjectProperty;
- Procedure TestLoadStringArrayProperty;
- Procedure TestLoadBooleanArrayProperty;
- Procedure TestLoadIntegerArrayProperty;
- Procedure TestLoadInt64ArrayProperty;
- Procedure TestLoadFloatArrayProperty;
- Procedure TestLoadObjectArrayProperty;
- Procedure TestLoadDelphiIntegerProperty;
- Procedure TestLoadDelphi2IntegersProperty;
- Procedure TestLoadDelphiIntegerWithErrorProperty;
- Procedure TestLoadDelphiIntegerCaseInsensitiveProperty;
- Procedure TestLoadDelphiStringProperty;
- Procedure TestLoadDelphiBooleanProperty;
- Procedure TestLoadDelphiInt64Property;
- Procedure TestLoadDelphiFloatProperty;
- procedure TestLoadDelphiObjectProperty;
- Procedure TestLoadDelphiStringArrayProperty;
- Procedure TestLoadDelphiBooleanArrayProperty;
- Procedure TestLoadDelphiIntegerArrayProperty;
- Procedure TestLoadDelphiInt64ArrayProperty;
- Procedure TestLoadDelphiFloatArrayProperty;
- procedure TestLoadDelphiObjectArrayProperty;
- Procedure TestSaveIntegerProperty;
- Procedure TestSave2IntegersProperty;
- Procedure TestSaveStringProperty;
- Procedure TestSaveBooleanProperty;
- Procedure TestSaveInt64Property;
- Procedure TestSaveFloatProperty;
- Procedure TestSaveObjectProperty;
- Procedure TestSaveStringArrayProperty;
- Procedure TestSaveBooleanArrayProperty;
- Procedure TestSaveIntegerArrayProperty;
- Procedure TestSaveInt64ArrayProperty;
- Procedure TestSaveFloatArrayProperty;
- Procedure TestSaveObjectArrayProperty;
- Procedure TestSaveDelphiIntegerProperty;
- Procedure TestSaveDelphi2IntegersProperty;
- Procedure TestSaveDelphiStringProperty;
- Procedure TestSaveDelphiBooleanProperty;
- Procedure TestSaveDelphiInt64Property;
- Procedure TestSaveDelphiFloatProperty;
- Procedure TestSaveDelphiObjectProperty;
- Procedure TestSaveDelphiStringArrayProperty;
- Procedure TestSaveDelphiBooleanArrayProperty;
- Procedure TestSaveDelphiIntegerArrayProperty;
- Procedure TestSaveDelphiInt64ArrayProperty;
- Procedure TestSaveDelphiFloatArrayProperty;
- Procedure TestSaveDelphiObjectArrayProperty;
- end;
- Var
- TestUnitDir : String;
- implementation
- procedure TTestGenCode.SetUp;
- begin
- FGen:=TJSONToPascal.Create(Nil);
- end;
- procedure TTestGenCode.TearDown;
- begin
- FreeAndNil(FGen)
- end;
- function TTestGenCode.NextLine: String;
- begin
- Result:='';
- While (Result='') do
- begin
- Inc(FPos);
- AssertTrue('In scope',FPos<FGen.Code.Count);
- Result:=Trim(FGen.Code[FPos]);
- end;
- end;
- procedure TTestGenCode.AssertUnitHeader;
- Var
- S: String;
- begin
- S:=NextLine;
- AssertTrue('Have unit',Pos('unit ',S)=1);
- S:=NextLine;
- AssertTrue('Have interface',Pos('interface',S)=1);
- S:=NextLine;
- AssertTrue('Have uses',Pos('uses ',S)=1);
- S:=NextLine;
- AssertTrue('Type line',Pos('Type',S)=1);
- end;
- procedure TTestGenCode.AssertBegin;
- begin
- AssertTrue('Have begin',pos('begin',nextline)>0);
- end;
- procedure TTestGenCode.AssertEnd(const Msg: String);
- begin
- AssertTrue('Have end:'+Msg,pos('end;',nextline)>0);
- end;
- procedure TTestGenCode.AssertUnitEnd;
- begin
- AssertTrue('Have end.',pos('end.',nextline)>0);
- end;
- procedure TTestGenCode.AssertImplementation;
- begin
- AssertTrue('Have implementation',CompareText(NextLine,'implementation')=0);
- end;
- function TTestGenCode.Pos(const What, Where: String): Integer;
- begin
- Result:=system.Pos(lowercase(what),lowercase(where));
- end;
- procedure TTestGenCode.AssertClassComment(const Msg,AName: String);
- Var
- S : String;
- begin
- S:=NextLine;
- AssertTrue(Msg+' ('+AName+'): Class header comment start',Pos('{ --',S)>0);
- S:=NextLine;
- AssertTrue(Msg+' ('+AName+'): Class header comment class nam',Pos(AName,S)>0);
- S:=NextLine;
- AssertTrue(Msg+' ('+AName+'): Class header comment end',Pos('}',S)>0);
- end;
- procedure TTestGenCode.AssertClassHeader(const AName: String; AParentName: String);
- Var
- P : Integer;
- S : String;
- begin
- AssertClassComment('Class declarationheader for '+AName,AName);
- S:=NextLine;
- P:=Pos(AName+' = class(',S);
- AssertTrue('class type ',P>0);
- P:=Pos(AParentName+')',S);
- AssertTrue('Class parent type ',P>0);
- AssertVisibility('private');
- end;
- procedure TTestGenCode.AssertSetterImplementation(const AClassType, AName,
- AType: String; IsObject: Boolean);
- Var
- S,PS : String;
- P : Integer;
- begin
- S:=NextLine;
- PS:='Procedure '+AClassType+'.Set'+Aname+'(AValue';
- AssertTrue('Have declaration start',Pos(PS,S)>0);
- Delete(S,1,Length(PS));
- P:=Pos(':',S);
- AssertTrue('Have colon' ,p>0);
- Delete(S,1,P);
- AssertTrue('Have type',Pos(AType,S)>0);
- AssertTrue('Have );',Pos(');',S)>0);
- AssertTrue('Terminated on semicolon',S[Length(S)]=';');
- AssertBegin;
- AssertTrue('Have change check',Pos('if ('+Gen.FieldPrefix+AName+'=AValue) then exit;',NextLine)>0);
- if IsObject then
- AssertTrue('Have free of previous value',Pos('FreeAndNil('+Gen.FieldPrefix+AName+');',NextLine)>0);
- AssertTrue('Have Assignment',Pos(Gen.FieldPrefix+AName+':=AValue;',NextLine)>0);
- AssertEnd;
- end;
- procedure TTestGenCode.AssertVisibility(const AVisibility: String);
- begin
- AssertTrue('Have visibility section '+AVisibility,Pos(AVisibility,NextLine)>0);
- end;
- procedure TTestGenCode.AssertDestructor;
- begin
- AssertTrue('Have destructor declaration',Pos('Destructor Destroy; override;',NextLine)>0);
- end;
- procedure TTestGenCode.AssertDestructorImplementation(AClassName: String;
- ObjectFields: array of string);
- Var
- F : String;
- begin
- AssertTrue('Have destructor implementation',Pos(Format('Destructor %s.Destroy;',[AClassName]),NextLine)>0);
- AssertBegin;
- For F in ObjectFields do
- AssertTrue('Have destructor for F'+F,Pos('FreeAndNil(F'+F+');',NextLine)>0);
- AssertTrue('Have inherited call'+F,Pos('Inherited;',NextLine)>0);
- AssertEnd;
- end;
- procedure TTestGenCode.AssertField(const AName, AType: String; Prefix : String = '');
- Var
- F,S : String;
- P : Integer;
- begin
- F:=Prefix;
- if F='' then
- F:='F';
- S:=NextLine;
- AssertTrue('Field Name',Pos(F+AName,S)=1);
- P:=Pos(':',S);
- AssertTrue('Colon after field name',P>Length(F+AName));
- AssertTrue('Field type after colon',Pos(AType,S)>P);
- AssertTrue('Terminated on semicolon',S[Length(S)]=';');
- end;
- procedure TTestGenCode.AssertSetter(const AName, AType: String);
- Var
- N,S,PD : String;
- P,p2 : Integer;
- begin
- S:=NextLine;
- N:='Setter declaration for '+AName+' : ';
- PD:='Procedure Set'+AName;
- AssertTrue(N+'Setter name',Pos(PD,S)=1);
- P:=Pos('(',S);
- AssertTrue(N+'( after parameter name',P>Length(PD));
- P:=Pos(':',S);
- AssertTrue(N+'Colon after parameter name',P>Length(PD));
- Delete(S,1,P);
- P2:=Pos(AType,S);
- AssertTrue(N+'Field type after colon '+AType+' : '+S,P2>0);
- P:=Pos(');',S);
- AssertTrue(N+'); type after parameter type',P>P2);
- P2:=Pos('virtual',S);
- AssertTrue(N+'virtual after ); ',P2>P);
- AssertTrue(N+'Terminated on semicolon',S[Length(S)]=';');
- end;
- procedure TTestGenCode.AssertArrayType(const AName, AItemType: String);
- Var
- P,p2 : Integer;
- S : String;
- begin
- S:=NextLine;
- AssertTrue('Type Name',Pos(AName,S)=1);
- P:=Pos('=',S);
- AssertTrue('Equal token after type Name',P>Pos(AName,S));
- P2:=Pos('Array of',S);
- AssertTrue('Array of after Equal token after type Name',P2>P);
- P:=Pos(AItemType,S);
- AssertTrue('Item type name after array of',P>P2);
- AssertTrue('Terminated on semicolon',S[Length(S)]=';');
- end;
- procedure TTestGenCode.AssertPropertyMap(const APath, ATypeName, APropertyName,
- AParentTypeName: String);
- Var
- M : TPropertyMapItem;
- begin
- M:=Gen.PropertyMap.FindPath(APath);
- AssertNotNull('Have property map "'+APath+'"',M);
- AssertEquals('Have type name ',ATypeName,M.TypeName);
- AssertEquals('Have property name ',APropertyName,M.PropertyName);
- AssertEquals('Have parent type name ',AParentTypeName,M.ParentTypeName);
- end;
- procedure TTestGenCode.AssertProperty(const AName, AType: String; Setter : Boolean = False);
- Var
- S : String;
- P,P2 : Integer;
- begin
- S:=NextLine;
- AssertTrue('Property Name',Pos('Property '+AName,S)=1);
- P:=Pos(':',S);
- AssertTrue('Colon after property name',P>Length('Property '+AName));
- P2:=Pos(AType,S);
- AssertTrue('Field type after colon',P2>P);
- P:=pos(' read ',S);
- AssertTrue('Read specifier after type ',P>P2);
- P2:=Pos('F'+AName,S);
- AssertTrue('Field name for read specifier',P2>P);
- P:=pos(' write ',S);
- AssertTrue('Write specifier after type ',P>P2);
- if Setter Then
- P2:=Pos('write Set'+AName,S)
- else
- P2:=Pos('write F'+AName,S);
- AssertTrue('Field name for write specifier',P2>P);
- AssertTrue('Terminated on semicolon',S[Length(S)]=';');
- end;
- procedure TTestGenCode.GenCode(AJSON : String);
- Var
- F : Text;
- begin
- Gen.JSON:=AJSON;
- Gen.DestUnitName:='u'+TestName;
- Gen.Execute;
- if (TestUnitDir<>'') then
- begin
- Assign(F,IncludeTrailingPathDelimiter(TestUnitDir)+Gen.DestUnitName+'.pp');
- Rewrite(F);
- Writeln(F,'// ',Self.TestName);
- Writeln(F,Gen.Code.Text);
- Close(F);
- Assign(F,IncludeTrailingPathDelimiter(TestUnitDir)+Gen.DestUnitName+'.json');
- Rewrite(F);
- Writeln(F,AJSON);
- Close(F);
- end
- else
- begin
- Writeln('// ',Self.TestName);
- Writeln('(* JSON: '+AJSON+' *)');
- Writeln(Gen.Code.Text);
- end;
- FPos:=-1;
- end;
- procedure TTestGenCode.TestEmpty;
- begin
- AssertNotNull('Have generator',Gen);
- AssertNotNull('Generator property map exists',Gen.PropertyMap);
- AssertNotNull('Generator property code exists',Gen.Code);
- AssertNull('Generator JSON empty',Gen.JSONData);
- AssertNull('Generator JSON stream empty',Gen.JSONStream);
- AssertEquals('Generator JSON empty','',Gen.JSON);
- AssertEquals('Generator property map empty',0,Gen.PropertyMap.Count);
- end;
- procedure TTestGenCode.TestSimple;
- begin
- GenCode('{}');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- end;
- procedure TTestGenCode.TestClassName;
- begin
- Gen.PropertyMap.AddPath('','TSomeObject');
- GenCode('{}');
- AssertUnitHeader;
- AssertClassHeader('TSomeObject','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertPropertyMap('','TSomeObject','','TObject');
- end;
- procedure TTestGenCode.TestParentClassName;
- begin
- Gen.PropertyMap.AddPath('','TSomeObject');
- Gen.DefaultParentName:='TMyObject';
- GenCode('{}');
- AssertUnitHeader;
- AssertClassHeader('TSomeObject','TMyObject');
- AssertVisibility('public');
- AssertEnd;
- AssertPropertyMap('','TSomeObject','','TMyObject');
- end;
- procedure TTestGenCode.TestIntegerProperty;
- begin
- GenCode('{ "a" : 1 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertVisibility('public');
- AssertProperty('a','integer');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- end;
- procedure TTestGenCode.Test2IntegersProperty;
- begin
- GenCode('{ "a" : 1, "b" : 2 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertField('b','integer');
- AssertVisibility('public');
- AssertProperty('a','integer');
- AssertProperty('b','integer');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- AssertPropertyMap('b','Integer','b','');
- end;
- procedure TTestGenCode.TestBooleanProperty;
- begin
- GenCode('{ "a" : true }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','boolean');
- AssertVisibility('public');
- AssertProperty('a','boolean');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Boolean','a','');
- end;
- procedure TTestGenCode.TestStringProperty;
- begin
- GenCode('{ "a" : "abce" }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','string');
- AssertVisibility('public');
- AssertProperty('a','string');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','String','a','');
- end;
- procedure TTestGenCode.TestFloatProperty;
- begin
- GenCode('{ "a" : 1.1 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','double');
- AssertVisibility('public');
- AssertProperty('a','double');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Double','a','');
- end;
- procedure TTestGenCode.TestInt64Property;
- begin
- GenCode('{ "a" : 1234567890123 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','int64');
- AssertVisibility('public');
- AssertProperty('a','int64');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Int64','a','');
- end;
- procedure TTestGenCode.TestPropertySetter;
- begin
- Gen.Options:=[jpoUseSetter];
- GenCode('{ "a" : 1234567890123 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','int64');
- AssertVisibility('protected');
- AssertSetter('A','int64');
- AssertVisibility('public');
- AssertProperty('a','int64',True);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSetterImplementation('TMyObject','a','int64');
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Int64','a','');
- end;
- procedure TTestGenCode.TestObjectProperty;
- begin
- GenCode('{ "a" : {} }');
- AssertUnitHeader;
- AssertClassHeader('TA','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('a','Ta');
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Comment for class TA','Ta');
- AssertClassComment('Comment for class TMyObject','TMyObject');
- AssertDestructorImplementation('TMyObject',['a']);
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','TObject');
- end;
- procedure TTestGenCode.TestObjectPropertySetter;
- begin
- Gen.Options:=[jpoUseSetter];
- GenCode('{ "a" : {} }');
- AssertUnitHeader;
- AssertClassHeader('TA','TObject');
- AssertVisibility('protected');
- AssertVisibility('public');
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('protected');
- AssertSetter('a','Ta');
- AssertVisibility('Public');
- AssertDestructor;
- AssertProperty('a','Ta',True);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Comment for class TA','Ta');
- AssertClassComment('Comment for class TMyObject','TMyObject');
- AssertDestructorImplementation('TMyObject',['a']);
- AssertSetterImplementation('TMyObject','a','Ta',True);
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','TObject');
- end;
- procedure TTestGenCode.TestObjectPropertySuffix;
- begin
- Gen.PropertyTypeSuffix:='Type';
- GenCode('{ "a" : {} }');
- AssertUnitHeader;
- AssertClassHeader('TAType','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','TaType');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('a','TaType');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','TaType','a','TObject');
- end;
- procedure TTestGenCode.TestObjectPropertySkip;
- begin
- Gen.PropertyTypeSuffix:='Type';
- Gen.PropertyMap.AddPath('a','me').SkipType:=true;
- GenCode('{ "a" : {} }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','me');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('a','me');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','me','a','');
- end;
- procedure TTestGenCode.TestObjectPropertyRecurse;
- begin
- GenCode('{ "a" : { "b" : {} } }');
- AssertUnitHeader;
- AssertClassHeader('TAB','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertClassHeader('TA','TObject');
- AssertField('b','TaB');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('b','TaB');
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','TObject');
- AssertPropertyMap('a.b','Tab','b','TObject');
- end;
- procedure TTestGenCode.TestObjectPropertyRecurseSuffix;
- begin
- Gen.PropertyTypeSuffix:='Type';
- GenCode('{ "a" : { "b" : {} } }');
- AssertUnitHeader;
- AssertClassHeader('TABType','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertClassHeader('TAType','TObject');
- AssertField('b','TaBType');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('b','TaBType');
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','TaType');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('a','TaType');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','TaType','a','TObject');
- AssertPropertyMap('a.b','TabType','b','TObject');
- end;
- procedure TTestGenCode.TestObjectPropertyRecurseSkip;
- begin
- Gen.PropertyMap.AddPath('a','me').SkipType:=true;
- GenCode('{ "a" : { "b" : {} } }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','me');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('a','me');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','me','a','');
- end;
- procedure TTestGenCode.TestObjectPropertyRecurseSkipB;
- begin
- Gen.PropertyMap.AddPath('a.b','me').SkipType:=true;
- GenCode('{ "a" : { "b" : {} } }');
- AssertUnitHeader;
- AssertClassHeader('TA','TObject');
- AssertField('b','me');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('b','me');
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertDestructor;
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','TObject');
- AssertPropertyMap('a.b','me','b','');
- end;
- procedure TTestGenCode.TestStringArrayProperty;
- begin
- GenCode('{ "a" : [ "" ] }');
- AssertUnitHeader;
- AssertArrayType('Ta','string');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- AssertPropertyMap('a[0]','String','','');
- end;
- procedure TTestGenCode.TestIntegerArrayProperty;
- begin
- GenCode('{ "a" : [ 1 ] }');
- AssertUnitHeader;
- AssertArrayType('Ta','integer');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- AssertPropertyMap('a[0]','Integer','','');
- end;
- procedure TTestGenCode.TestBooleanArrayProperty;
- begin
- GenCode('{ "a" : [ true ] }');
- AssertUnitHeader;
- AssertArrayType('Ta','Boolean');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- AssertPropertyMap('a[0]','Boolean','','');
- end;
- procedure TTestGenCode.TestFloatArrayProperty;
- begin
- GenCode('{ "a" : [ 1.2 ] }');
- AssertUnitHeader;
- AssertArrayType('Ta','Double');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- AssertPropertyMap('a[0]','Double','','');
- end;
- procedure TTestGenCode.TestInt64ArrayProperty;
- begin
- GenCode('{ "a" : [ 1234567890123 ] }');
- AssertUnitHeader;
- AssertArrayType('Ta','Int64');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- AssertPropertyMap('a[0]','Int64','','');
- end;
- procedure TTestGenCode.TestStringArrayPropertySuffix;
- begin
- Gen.PropertyTypeSuffix:='Type';
- GenCode('{ "a" : [ "" ] }');
- AssertUnitHeader;
- AssertArrayType('TaType','string');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','TaType');
- AssertVisibility('public');
- AssertProperty('a','TaType');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','TaType','a','');
- AssertPropertyMap('a[0]','String','','');
- end;
- procedure TTestGenCode.TestObjectArrayProperty;
- begin
- GenCode('{ "a" : [ {} ] }');
- AssertUnitHeader;
- AssertClassHeader('TaItem','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertArrayType('Ta','TaItem');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- AssertPropertyMap('a[0]','TaItem','','TObject');
- end;
- procedure TTestGenCode.TestObjectArrayPropertySuffix;
- begin
- Gen.PropertyTypeSuffix:='Type';
- GenCode('{ "a" : [ {} ] }');
- AssertUnitHeader;
- AssertClassHeader('TaItemType','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertArrayType('TaType','TaItemType');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','TaType');
- AssertVisibility('public');
- AssertProperty('a','TaType');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','TaType','a','');
- AssertPropertyMap('a[0]','TaItemType','','TObject');
- end;
- procedure TTestGenCode.TestArrayArrayProperty;
- begin
- GenCode('{ "a" : [ [ "" ] ] }');
- AssertUnitHeader;
- AssertArrayType('TaItem','String');
- AssertArrayType('Ta','TaItem');
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertProperty('a','Ta');
- AssertEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- AssertPropertyMap('a[0]','TaItem','','');
- AssertPropertyMap('a[0][0]','String','','');
- end;
- procedure TTestGenCode.TestObjectArrayArrayProperty;
- begin
- GenCode('{ "a" : [ [ {} ] ] }');
- AssertUnitHeader;
- AssertClassHeader('TaItemItem','TObject');
- AssertVisibility('public');
- AssertEnd;
- AssertArrayType('TaItem','TaItemItem');
- AssertArrayType('Ta','TaItem');
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- AssertPropertyMap('a[0]','TaItem','','');
- AssertPropertyMap('a[0][0]','TaItemItem','','TObject');
- end;
- procedure TTestGenCode.AssertLoadConstructorDeclaration(AType: String);
- Var
- S : String;
- begin
- S:=NextLine;
- AssertTrue('Load Constructor declaration in '+S,Pos('Constructor CreateFromJSON(AJSON : '+AType+'); virtual;',S)>0);
- end;
- procedure TTestGenCode.AssertLoaderDeclaration(AType : String);
- Var
- S : String;
- begin
- S:=NextLine;
- AssertTrue('LoadFromJSON declaration in '+S,Pos('Procedure LoadFromJSON(AJSON : '+AType+'); virtual;',S)>0);
- end;
- procedure TTestGenCode.AssertSaverDeclaration;
- Var
- S : String;
- begin
- S:=NextLine;
- AssertTrue('SaveToJSON function declaration in '+S,Pos('Function SaveToJSON : TJSONObject;',S)>0);
- S:=NextLine;
- AssertTrue('SaveToJSON procedure declaration in '+S,Pos('Procedure SaveToJSON(AJSON : TJSONObject)',S)>0);
- end;
- procedure TTestGenCode.AssertLoaderImplementationEnd(IsDelphi : Boolean = False);
- begin
- if Not IsDelphi then
- AssertEnd('Case');// Case
- AssertEnd('for');// For
- AssertEnd('procedure');// Routine
- end;
- procedure TTestGenCode.AssertArrayLoaderImplementationStart(const ATypeName,
- ADataName, ArrayName, ArrayTypeName, ArrayElementType: String; IsDelphi : Boolean = False);
- Var
- S : String;
- begin
- S:=NextLine;
- AssertTrue('Have loader start: '+ATypeName+','+ADataName,Pos('Procedure '+ATypeName+'.LoadFromJSON(AJSON : '+ADataName+');',S)>0);
- if isDelphi then
- AssertDelphiPropertyAssignmentLoop
- else
- AssertPropertyAssignmentLoop;
- end;
- procedure TTestGenCode.AssertPropertyAssignmentLoop;
- begin
- AssertTrue('Have var',Pos('var',NextLine)>0);
- AssertTrue('Have P enum',Pos('E : TJSONEnum;',NextLine)>0);
- AssertBegin;
- AssertTrue('Have E for enum',Pos('For E in AJSON do',NextLine)>0);
- AssertBegin;
- if (jpoLoadCaseInsensitive in Gen.Options) then
- AssertTrue('Have E for enum',Pos('case LowerCase(E.key) of',NextLine)>0)
- else
- AssertTrue('Have E for enum',Pos('case E.key of',NextLine)>0);
- end;
- procedure TTestGenCode.AssertDelphiPropertyAssignmentLoop;
- Var
- S : String;
- begin
- AssertTrue('Have var',Pos('var',NextLine)>0);
- AssertTrue('Have pair',Pos('P : TJSONPair;',NextLine)>0);
- AssertTrue('Have obj',Pos('O : TJSONObject;',NextLine)>0);
- AssertTrue('Have Propertyname var',Pos('PN : String;',NextLine)>0);
- AssertBegin;
- S:=NextLine;
- AssertTrue('Have JSONObject check in '+S,Pos('not (AJSON is TJSONObject)',S)>0);
- if jpoUnknownLoadPropsError in gen.Options then
- AssertTrue('Have raise statement',Pos('Raise EJSONException',NextLine)>0);
- AssertTrue('Have typecast',Pos('O:=AJSON as TJSONObject',NextLine)>0);
- AssertTrue('Have P for enum',Pos('For P in O do',NextLine)>0);
- AssertBegin;
- if jpoLoadCaseInsensitive in Gen.Options then
- AssertTrue('Have case insensitive propertyname assign',Pos('PN:=LowerCase(P.JSONString.Value)',NextLine)>0)
- else
- AssertTrue('Have propertyname assign',Pos('PN:=P.JSONString.Value',NextLine)>0);
- end;
- procedure TTestGenCode.AssertObjectLoaderImplementationStart(const ATypeName,
- ADataName, ArrayName, ArrayTypeName, ArrayElementType: String; IsDelphi : Boolean = False);
- Var
- S : String;
- begin
- S:=NextLine;
- AssertTrue('Have loader start: '+ATypeName+','+ADataName,Pos('Procedure '+ATypeName+'.LoadFromJSON(AJSON : '+ADataName+');',S)>0);
- if isDelphi then
- AssertDelphiPropertyAssignmentLoop
- else
- AssertPropertyAssignmentLoop;
- end;
- procedure TTestGenCode.AssertSaverImplementationStart(const ATypeName: String;
- IsDelphi: Boolean);
- Var
- S,N : String;
- begin
- N:='SaveToJSONFunction '+ATypeName+' : ';
- S:=NextLine;
- AssertTrue(N+'header',Pos('Function '+ATypeName+'.SaveToJSON : TJSONObject;',S)>0);
- AssertBegin;
- AssertTrue(N+'Create',Pos('Result:=TJSONObject.Create',NextLine)>0);
- AssertTrue(N+'Try',Pos('Try',NextLine)>0);
- AssertTrue(N+'Save',Pos('SaveToJSON(Result);',NextLine)>0);
- AssertTrue(N+'except',Pos('except',NextLine)>0);
- AssertTrue(N+'FreeAndNil',Pos('FreeAndNil(Result);',NextLine)>0);
- AssertTrue(N+'Reraise',Pos('Raise;',NextLine)>0);
- AssertTrue(N+'end;',Pos('End;',NextLine)>0);
- AssertTrue(N+'end;',Pos('End;',NextLine)>0);
- AssertTrue(N+'proc header',Pos('Procedure '+ATypeName+'.SaveToJSON(AJSON : TJSONObject);',NextLine)>0);
- AssertBegin;
- end;
- procedure TTestGenCode.AssertLoaderImplementationStart(const ATypeName,
- ADataName: String; IsDelphi : Boolean = False);
- begin
- AssertTrue(Pos('Procedure '+ATypeName+'.LoadFromJSON(AJSON : '+ADataName+');',NextLine)>0);
- if isDelphi then
- AssertDelphiPropertyAssignmentLoop
- else
- AssertPropertyAssignmentLoop;
- end;
- procedure TTestGenCode.AssertLoadConstructorImplementationStart(const ATypeName,
- ADataName: String);
- begin
- AssertTrue('Have constructor call',Pos('Constructor '+ATypeName+'.CreateFromJSON(AJSON : '+ADataName+');',NextLine)>0);
- AssertBegin;
- AssertTrue('Call create constructor',Pos('create();',NextLine)>0);
- AssertTrue('Call LoadFromJSON',Pos('LoadFromJSON(AJSON);',NextLine)>0);
- AssertEnd;
- end;
- procedure TTestGenCode.TestLoadIntegerProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : 1234 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertLoaderImplementationStart('TMyObject','TJSONData');
- AssertTrue('Have "a" integer property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" integer property set', Pos('a:=E.Value.AsInteger;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- end;
- procedure TTestGenCode.TestLoad2IntegersProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : 1234, "b" : 5678 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertField('b','integer');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','integer',False);
- AssertProperty('b','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertLoaderImplementationStart('TMyObject','TJSONData');
- AssertTrue('Have "a" integer property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" integer property set', Pos('a:=E.Value.AsInteger;',NextLine)>0);
- AssertTrue('Have "b" integer property case',Pos('''b'':',NextLine)>0);
- AssertTrue('Have "b" integer property set', Pos('b:=E.Value.AsInteger;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- AssertPropertyMap('b','Integer','b','');
- end;
- procedure TTestGenCode.TestLoadIntegerWithErrorProperty;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoUnknownLoadPropsError];
- GenCode('{ "a" : 1234, "b" : 5678 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertField('b','integer');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','integer',False);
- AssertProperty('b','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertLoaderImplementationStart('TMyObject','TJSONData');
- AssertTrue('Have "a" integer property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" integer property set', Pos('a:=E.Value.AsInteger;',NextLine)>0);
- AssertTrue('Have "b" integer property case',Pos('''b'':',NextLine)>0);
- AssertTrue('Have "b" integer property set', Pos('b:=E.Value.AsInteger;',NextLine)>0);
- AssertTrue('Have case else',Pos('else',NextLine)>0);
- AssertTrue('Have raise statement', Pos('Raise EJSON.CreateFmt',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- AssertPropertyMap('b','Integer','b','');
- end;
- procedure TTestGenCode.TestLoadIntegerCaseInsensitiveProperty;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoLoadCaseInsensitive];
- GenCode('{ "A" : 1234 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('A','integer');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('A','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertLoaderImplementationStart('TMyObject','TJSONData',False);
- AssertTrue('Have "a" integer property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" integer property set', Pos('A:=E.Value.AsInteger;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('A','Integer','A','');
- end;
- procedure TTestGenCode.TestLoadStringProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : "1234" }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','string');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','string',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertLoaderImplementationStart('TMyObject','TJSONData');
- AssertTrue('Have "a" string property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" string property set', Pos('a:=E.Value.AsString;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','String','a','');
- end;
- procedure TTestGenCode.TestLoadBooleanProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : true }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','boolean');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','boolean',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertLoaderImplementationStart('TMyObject','TJSONData');
- AssertTrue('Have "a" boolean property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" boolean property set', Pos('a:=E.Value.AsBoolean;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Boolean','a','');
- end;
- procedure TTestGenCode.TestLoadInt64Property;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : 1234567890123 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Int64');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','Int64',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertLoaderImplementationStart('TMyObject','TJSONData');
- AssertTrue('Have "a" Int64 property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" Int64 property set', Pos('a:=E.Value.AsInt64;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Int64','a','');
- end;
- procedure TTestGenCode.TestLoadFloatProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : 1.1 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Double');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','Double',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertLoaderImplementationStart('TMyObject','TJSONData');
- AssertTrue('Have "a" Double property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" Double property set', Pos('a:=E.Value.AsFloat;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Double','a','');
- end;
- procedure TTestGenCode.TestLoadObjectProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : { "b" : "abc" } }');
- AssertUnitHeader;
- AssertClassHeader('Ta','TObject');
- AssertField('b','String');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('b','String',False);
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertDestructor;
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','Ta');
- AssertLoadConstructorImplementationStart('Ta','TJSONData');
- AssertLoaderImplementationStart('Ta','TJSONData');
- AssertTrue('Have "b" string property case',Pos('''b'':',NextLine)>0);
- AssertTrue('Have "b" string property set', Pos('b:=E.Value.AsString;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertClassComment('Object Implementation','TMyObject');
- AssertDestructorImplementation('TMyObject',['a']);
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertObjectLoaderImplementationStart('TMyObject','TJSONData','a','Ta','');
- AssertTrue('Have "a" object property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" object create createfromjson', Pos('a:=ta.CreateFromJSON(E.Value);',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','TObject');
- end;
- procedure TTestGenCode.AssertArrayCreator(const ArrayTypeName,
- AElementType: String; IsDelphi: Boolean);
- Var
- S : String;
- begin
- S:=NextLine;
- AssertTrue('Have array creator in '+S,Pos('Function Create'+ArrayTypeName+'(AJSON : '+GetDataName(IsDelphi)+') : '+ArrayTypeName,S)>0);
- end;
- procedure TTestGenCode.AssertArraySaver(const ArrayTypeName,
- AElementType: String; IsDelphi: Boolean);
- Var
- E,S : String;
- begin
- S:=NextLine;
- E:='Procedure Save'+ArrayTypeName+'ToJSON(AnArray : '+ArrayTypeName+'; AJSONArray : TJSONArray);';
- AssertTrue('Have proc array saver in '+S,Pos(E,S)>0);
- S:=NextLine;
- E:='Function Save'+ArrayTypeName+'ToJSON(AnArray : '+ArrayTypeName+') : TJSONArray;';
- AssertTrue('Have func array saver in '+S,Pos(E,S)>0);
- end;
- procedure TTestGenCode.AssertArrayCreatorImplementation(const ArrayTypeName,
- AElementType: String; AObjectName: String; IsDelphi: Boolean);
- Var
- S,E,AN : String;
- begin
- S:=NextLine;
- E:='Function Create'+ARrayTypeName+'(AJSON : '+GetDataName(IsDelphi)+') : '+ArrayTypeName;
- AssertTrue('Have array creator header '+S+'Expected : '+E ,Pos(E,S)>0);
- AssertTrue('Have var',Pos('var',NextLine)>0);
- AssertTrue('Have loop var',Pos('I : Integer;',NextLine)>0);
- if IsDelphi then
- begin
- AssertTrue('Have Array var',Pos('A : TJSONArray;',NextLine)>0);
- AN:='A'
- end
- else
- AN:='AJSON';
- AssertBegin;
- if IsDelphi then
- AssertTrue('Have Array assignnment',Pos('A:=AJSON as TJSONArray;',NextLine)>0);
- AssertTrue('Have array setlength ',Pos('SetLength(Result,'+AN+'.Count);',NextLine)>0);
- AssertTrue('Have loop ',Pos('for i:=0 to '+AN+'.Count-1 do',NextLine)>0);
- if AObjectName='' then
- begin
- if IsDelphi then
- AssertTrue('Have element assignment : '+AElementType,Pos('Result[i]:='+AN+'.Items[i].GetValue<'+AElementType+'>;',NextLine)>0)
- else
- AssertTrue('Have element assignment : '+AElementType,Pos('Result[i]:='+AN+'.Items[i].'+AElementType+';',NextLine)>0)
- end
- else
- AssertTrue('Have element assignment : '+AElementType,Pos('Result[i]:='+AObjectName+'.CreateFromJSON('+AN+'.Items[i]);',NextLine)>0);
- AssertEnd;
- end;
- procedure TTestGenCode.AssertLine(Msg : String; AExpected : String);
- Var
- N,DMsg : String;
- begin
- N:=NextLine;
- DMsg:=Msg+', Expected: "'+AExpected+'", Actual: "'+N+'"';
- AssertTrue(Dmsg,Pos(AExpected,N)>0);
- end;
- procedure TTestGenCode.AssertArraySaverImplementation(const ArrayTypeName,
- AElementType: String; AObjectName: String; IsDelphi: Boolean);
- Var
- N,S,E,AN : String;
- begin
- N:=ArrayTypeName+'Saver : ';
- S:=NextLine;
- E:='Function Save'+ArrayTypeName+'ToJSON(AnArray : '+ArrayTypeName+') : TJSONArray;';
- AssertTrue(N+'header',Pos(E,S)>0);
- AssertBegin;
- AssertTrue(N+'Create',Pos('Result:=TJSONArray.Create',NextLine)>0);
- AssertTrue(N+'Try',Pos('Try',NextLine)>0);
- S:=NextLine;
- E:='Save'+ArrayTypeName+'ToJSON(AnArray,Result);';
- AssertTrue(N+'Save',Pos(E,S)>0);
- AssertTrue(N+'except',Pos('except',NextLine)>0);
- AssertTrue(N+'FreeAndNil',Pos('FreeAndNil(Result);',NextLine)>0);
- AssertTrue(N+'Reraise',Pos('Raise;',NextLine)>0);
- AssertTrue(N+'end;',Pos('End;',NextLine)>0);
- AssertTrue(N+'end;',Pos('End;',NextLine)>0);
- S:=NextLine;
- E:='Procedure Save'+ArrayTypeName+'ToJSON(AnArray : '+ArrayTypeName+'; AJSONArray : TJSONArray);';
- AssertTrue('Have array saver header '+S+'Expected : '+E ,Pos(E,S)>0);
- AssertTrue('Have var',Pos('var',NextLine)>0);
- AssertTrue('Have loop var',Pos('I : Integer;',NextLine)>0);
- AssertBegin;
- AssertTrue('Have loop ',Pos('for i:=0 to Length(AnArray)-1 do',NextLine)>0);
- if AObjectName='' then
- AssertLine('Have element assignment : '+AElementType,'AJSONArray.Add(AnArray[i]);')
- { else if AObjectName='' then
- AssertLine('Have element assignment : '+AElementType,'AJSONArray.Add('+AN+'[i]);')}
- else
- AssertTrue('Have element assignment : '+AElementType,Pos('AJSONArray.Add(AnArray[i].SaveToJSON);',NextLine)>0);
- AssertEnd;
- end;
- procedure TTestGenCode.AssertType;
- begin
- AssertTrue('Have Type keyword',Pos('Type',NextLine)>0);
- end;
- procedure TTestGenCode.AssertDelphiLoadArray(AElementType, AJSONtype : String);
- begin
- AssertUnitHeader;
- AssertArrayType('Ta',AElementType);
- AssertArrayCreator('Ta',AElementType,true);
- AssertType;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertArrayCreatorImplementation('Ta',AJSONType,'',True);
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertArrayLoaderImplementationStart('TMyObject','TJSONValue','a','Ta',AJSONType);
- AssertTrue('Have "a" property if',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" property set with createarray', Pos('a:=CreateTa(P.Value);',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- end;
- class function TTestGenCode.GetDataName(IsDelphi: Boolean): string;
- begin
- if IsDelphi then
- Result:='TJSONValue'
- else
- Result:='TJSONData';
- end;
- procedure TTestGenCode.AssertLoadArray(AElementType, AJSONtype: String;
- IsDelphi: Boolean = False);
- Var
- DN : String;
- begin
- AssertUnitHeader;
- DN:=GetDataName(IsDelphi);
- AssertArrayType('Ta',AElementType);
- AssertArrayCreator('Ta',AElementType,IsDelphi);
- AssertType;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration(DN);
- AssertLoaderDeclaration(DN);
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertArrayCreatorImplementation('Ta',AJSONType,'',IsDelphi);
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject',DN);
- AssertArrayLoaderImplementationStart('TMyObject',DN,'a','Ta',AJSONType,isDelphi);
- if IsDelphi then
- begin
- AssertTrue('Have "a" property if',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" property set with createarray', Pos('a:=CreateTa(P.JSONValue);',NextLine)>0);
- end
- else
- begin
- AssertTrue('Have "a" array property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" property set with createarray', Pos('a:=CreateTa(E.Value);',NextLine)>0);
- end;
- AssertLoaderImplementationEnd(IsDelphi);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- end;
- procedure TTestGenCode.AssertSaveArray(AElementType, AJSONtype: String; IsDelphi: Boolean = False);
- Var
- DN : String;
- begin
- AssertUnitHeader;
- DN:=GetDataName(IsDelphi);
- AssertArrayType('Ta',AElementType);
- AssertArraySaver('Ta',AElementType,IsDelphi);
- AssertType;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertArraySaverImplementation('Ta',AJSONType,'',IsDelphi);
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- if IsDelphi then
- AssertTrue('Array save statement', Pos('AJSON.AddPair(''a'',SaveTaToJSON(a));',NextLine)>0)
- else
- AssertTrue('Array save statement', Pos('AJSON.Add(''a'',SaveTaToJSON(a));',NextLine)>0);
- AssertEnd('Saver');
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- end;
- procedure TTestGenCode.TestLoadStringArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : [ "abc" ] }');
- AssertLoadArray('string','AsString');
- end;
- procedure TTestGenCode.TestLoadBooleanArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : [ true ] }');
- AssertLoadArray('boolean','AsBoolean');
- end;
- procedure TTestGenCode.TestLoadIntegerArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : [ 123 ] }');
- AssertLoadArray('Integer','AsInteger');
- end;
- procedure TTestGenCode.TestLoadInt64ArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : [ 1234567890123 ] }');
- AssertLoadArray('Int64','AsInt64');
- end;
- procedure TTestGenCode.TestLoadFloatArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : [ 12.34 ] }');
- AssertLoadArray('Double','AsFloat');
- end;
- procedure TTestGenCode.TestLoadObjectArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad];
- GenCode('{ "a" : [ { "b" : "abc" } ] }');
- AssertUnitHeader;
- AssertClassHeader('TaItem','TObject');
- AssertField('b','String');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('b','String',False);
- AssertEnd;
- AssertArrayType('Ta','TaItem');
- AssertArrayCreator('Ta','TaItem');
- AssertType;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONData');
- AssertLoaderDeclaration('TJSONData');
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TaItem');
- AssertLoadConstructorImplementationStart('TAItem','TJSONData');
- AssertLoaderImplementationStart('TaItem','TJSONData');
- AssertTrue('Have "b" string property case',Pos('''b'':',NextLine)>0);
- AssertTrue('Have "b" string property set', Pos('b:=E.Value.AsString;',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertArrayCreatorImplementation('Ta','','TaItem');
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONData');
- AssertObjectLoaderImplementationStart('TMyObject','TJSONData','a','Ta','');
- AssertTrue('Have "a" stringarray property case',Pos('''a'':',NextLine)>0);
- AssertTrue('Have "a" property set with createarray', Pos('a:=CreateTa(E.Value);',NextLine)>0);
- AssertLoaderImplementationEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- end;
- procedure TTestGenCode.TestLoadDelphiIntegerProperty;
- Var
- S : String;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON];
- GenCode('{ "a" : 1234 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertLoaderImplementationStart('TMyObject','TJSONValue',True);
- AssertTrue('Have "a" integer property case ',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" integer property set', Pos('a:=P.JSONValue.GetValue<Integer>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- end;
- procedure TTestGenCode.TestLoadDelphi2IntegersProperty;
- Var
- S : String;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON];
- GenCode('{ "a" : 1234, "b" : 5678 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertField('b','integer');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','integer',False);
- AssertProperty('b','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertLoaderImplementationStart('TMyObject','TJSONValue',True);
- AssertTrue('Have "a" integer property case ',Pos('If (PN=''a'') then',NextLine)>0);
- S:=NextLine;
- AssertTrue('Have "a" integer property set', Pos('a:=P.JSONValue.GetValue<Integer>',S)>0);
- AssertTrue('Have no semicolon', Pos(';',S)=0);
- AssertTrue('Have else "b" integer property case ',Pos('Else If (PN=''b'') then',NextLine)>0);
- AssertTrue('Have "b" integer property set', Pos('b:=P.JSONValue.GetValue<Integer>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- AssertPropertyMap('b','Integer','b','');
- end;
- procedure TTestGenCode.TestLoadDelphiIntegerWithErrorProperty;
- Var
- S : String;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON,jpoUnknownLoadPropsError];
- GenCode('{ "a" : 1234, "b" : 5678 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertField('b','integer');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','integer',False);
- AssertProperty('b','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertLoaderImplementationStart('TMyObject','TJSONValue',True);
- AssertTrue('Have "a" integer property case ',Pos('If (PN=''a'') then',NextLine)>0);
- S:=NextLine;
- AssertTrue('Have "a" integer property set', Pos('a:=P.JSONValue.GetValue<Integer>',S)>0);
- AssertTrue('Have no semicolon for a', Pos(';',S)=0);
- AssertTrue('Have "b" integer property case ',Pos('If (PN=''b'') then',NextLine)>0);
- S:=NextLine;
- AssertTrue('Have "b" integer property set', Pos('b:=P.JSONValue.GetValue<Integer>',S)>0);
- AssertTrue('Have no semicolon for b', Pos(';',S)=0);
- AssertTrue('Have case else',Pos('else',NextLine)>0);
- AssertTrue('Have raise statement', Pos('Raise EJSONException.CreateFmt',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- AssertPropertyMap('b','Integer','b','');
- end;
- procedure TTestGenCode.TestLoadDelphiIntegerCaseInsensitiveProperty;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON,jpoLoadCaseInsensitive];
- GenCode('{ "A" : 1234 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('A','integer');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('A','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertLoaderImplementationStart('TMyObject','TJSONValue',True);
- AssertTrue('Have "a" integer property case',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "A" integer property set', Pos('A:=P.JSONValue.GetValue<Integer>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('A','Integer','A','');
- end;
- procedure TTestGenCode.TestLoadDelphiStringProperty;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON];
- GenCode('{ "a" : "1234" }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','String');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','string',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertLoaderImplementationStart('TMyObject','TJSONValue',True);
- AssertTrue('Have "a" integer property case',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" integer property set', Pos('a:=P.JSONValue.GetValue<String>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','String','a','');
- end;
- procedure TTestGenCode.TestLoadDelphiBooleanProperty;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON];
- GenCode('{ "a" : true }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','boolean');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','boolean',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertLoaderImplementationStart('TMyObject','TJSONValue',True);
- AssertTrue('Have "a" integer property case',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" integer property set',Pos('a:=P.JSONValue.GetValue<Boolean>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Boolean','a','');
- end;
- procedure TTestGenCode.TestLoadDelphiInt64Property;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON];
- GenCode('{ "a" : 1234567890123 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Int64');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','Int64',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertLoaderImplementationStart('TMyObject','TJSONValue',True);
- AssertTrue('Have "a" integer property case',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" integer property set',Pos('a:=P.JSONValue.GetValue<Int64>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Int64','a','');
- end;
- procedure TTestGenCode.TestLoadDelphiFloatProperty;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON];
- GenCode('{ "a" : 1.1 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Double');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','Double',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertLoaderImplementationStart('TMyObject','TJSONValue',True);
- AssertTrue('Have "a" integer property case',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" integer property set',Pos('a:=P.JSONValue.GetValue<Double>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Double','a','');
- end;
- procedure TTestGenCode.TestLoadDelphiObjectProperty;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON];
- GenCode('{ "a" : { "b" : "abc" } }');
- AssertUnitHeader;
- AssertClassHeader('Ta','TObject');
- AssertField('b','String');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('b','String',False);
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertDestructor;
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','Ta');
- AssertLoadConstructorImplementationStart('Ta','TJSONValue');
- AssertLoaderImplementationStart('Ta','TJSONValue',True);
- AssertTrue('Have "b" string property case',Pos('If (PN=''b'') then',NextLine)>0);
- AssertTrue('Have "b" string property set', Pos('b:=P.JSONValue.GetValue<String>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertClassComment('Object Implementation','TMyObject');
- AssertDestructorImplementation('TMyObject',['a']);
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertObjectLoaderImplementationStart('TMyObject','TJSONValue','a','Ta','',True);
- AssertTrue('Have "a" object property case',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" object create createfromjson', Pos('a:=ta.CreateFromJSON(P.JSONValue);',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','TObject');
- end;
- procedure TTestGenCode.TestLoadDelphiObjectArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad,jpoDelphiJSON];
- GenCode('{ "a" : [ { "b" : "abc" } ] }');
- AssertUnitHeader;
- AssertClassHeader('TaItem','TObject');
- AssertField('b','String');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('b','String',False);
- AssertEnd;
- AssertArrayType('Ta','TaItem');
- AssertArrayCreator('Ta','TaItem',True);
- AssertType;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertLoadConstructorDeclaration('TJSONValue');
- AssertLoaderDeclaration('TJSONValue');
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TaItem');
- AssertLoadConstructorImplementationStart('TAItem','TJSONValue');
- AssertLoaderImplementationStart('TaItem','TJSONValue',True);
- AssertTrue('Have "b" object property case',Pos('If (PN=''b'') then',NextLine)>0);
- AssertTrue('Have "b" object property set', Pos('b:=P.JSONValue.GetValue<String>;',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertArrayCreatorImplementation('Ta','','TaItem',True);
- AssertClassComment('Object Implementation','TMyObject');
- AssertLoadConstructorImplementationStart('TMyObject','TJSONValue');
- AssertObjectLoaderImplementationStart('TMyObject','TJSONValue','a','Ta','',True);
- AssertTrue('Have "a" object property case',Pos('If (PN=''a'') then',NextLine)>0);
- AssertTrue('Have "a" property set with createarray', Pos('a:=CreateTa(P.JSONValue);',NextLine)>0);
- AssertLoaderImplementationEnd(True);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- end;
- procedure TTestGenCode.TestSaveIntegerProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : 1234 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" integer property save', Pos('AJSON.Add(''a'',a);',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- end;
- procedure TTestGenCode.TestSave2IntegersProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : 1234, "b" : 5678 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertField('b','integer');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','integer',False);
- AssertProperty('b','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" integer property save', Pos('AJSON.Add(''a'',a);',NextLine)>0);
- AssertTrue('Have "b" integer property save', Pos('AJSON.Add(''b'',b);',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- AssertPropertyMap('b','Integer','b','');
- end;
- procedure TTestGenCode.TestSaveStringProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : "1234" }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','string');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','string',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" integer property save', Pos('AJSON.Add(''a'',a);',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','String','a','');
- end;
- procedure TTestGenCode.TestSaveBooleanProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : true }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Boolean');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','Boolean',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" boolean property save', Pos('AJSON.Add(''a'',a);',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Boolean','a','');
- end;
- procedure TTestGenCode.TestSaveInt64Property;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : 1234567890123 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Int64');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','Int64',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" int64 property save', Pos('AJSON.Add(''a'',a);',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Int64','a','');
- end;
- procedure TTestGenCode.TestSaveFloatProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : 1.2 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','double');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','double',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" integer property save', Pos('AJSON.Add(''a'',a);',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Double','a','');
- end;
- procedure TTestGenCode.TestSaveObjectProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : { "b" : "abc" } }');
- AssertUnitHeader;
- AssertClassHeader('Ta','TObject');
- AssertField('b','String');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('b','String',False);
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertDestructor;
- AssertSaverDeclaration;
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','Ta');
- AssertSaverImplementationStart('Ta');
- AssertTrue('Have "b" property save', Pos('AJSON.Add(''b'',b);',NextLine)>0);
- AssertEnd;
- AssertClassComment('Object Implementation','TMyObject');
- AssertDestructorImplementation('TMyObject',['a']);
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have check for assigned object property save', Pos('if Assigned(a) then',NextLine)>0);
- AssertTrue('Have "a" object property save', Pos('AJSON.Add(''a'',a.SaveToJSON);',NextLine)>0);
- AssertEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','TObject');
- end;
- procedure TTestGenCode.TestSaveStringArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : [ "abc" ] }');
- AssertSaveArray('string','');
- end;
- procedure TTestGenCode.TestSaveBooleanArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : [ true ] }');
- AssertSaveArray('boolean','');
- end;
- procedure TTestGenCode.TestSaveIntegerArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : [ 123 ] }');
- AssertSaveArray('Integer','');
- end;
- procedure TTestGenCode.TestSaveInt64ArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : [ 1234567890123 ] }');
- AssertSaveArray('Int64','');
- end;
- procedure TTestGenCode.TestSaveFloatArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : [ 1.23] }');
- AssertSaveArray('Double','');
- end;
- procedure TTestGenCode.TestSaveObjectArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave];
- GenCode('{ "a" : [ { "b" : "abc" } ] }');
- AssertUnitHeader;
- AssertClassHeader('TaItem','TObject');
- AssertField('b','String');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('b','String',False);
- AssertEnd;
- AssertArrayType('Ta','TaItem');
- AssertArraySaver('Ta','TaItem');
- AssertType;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TaItem');
- AssertSaverImplementationStart('TaItem');
- AssertTrue('Have "b" string property save', Pos('AJSON.Add(''b'',b);',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertArraySaverImplementation('Ta','','TaItem');
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" array property save', Pos('AJSON.Add(''a'',SaveTaToJSON(a));',NextLine)>0);
- AssertEnd('Loader TMyObject');
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- end;
- procedure TTestGenCode.TestSaveDelphiIntegerProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : 1234 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" integer property save', Pos('AJSON.AddPair(''a'',TJSONNumber.Create(a));',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- end;
- procedure TTestGenCode.TestSaveDelphi2IntegersProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : 1234, "b" : 5678 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','integer');
- AssertField('b','integer');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','integer',False);
- AssertProperty('b','integer',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" integer property save', Pos('AJSON.AddPair(''a'',TJSONNumber.Create(a));',NextLine)>0);
- AssertTrue('Have "b" integer property save', Pos('AJSON.AddPair(''b'',TJSONNumber.Create(b));',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Integer','a','');
- AssertPropertyMap('b','Integer','b','');
- end;
- procedure TTestGenCode.TestSaveDelphiStringProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : "1234" }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','string');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','string',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" string property save', Pos('AJSON.AddPair(''a'',TJSONString.Create(a));',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','String','a','');
- end;
- procedure TTestGenCode.TestSaveDelphiBooleanProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : true }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Boolean');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','Boolean',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" Boolean property save', Pos('AJSON.AddPair(''a'',TJSONBoolean.Create(a));',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Boolean','a','');
- end;
- procedure TTestGenCode.TestSaveDelphiInt64Property;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : 1234567890123 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Int64');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','Int64',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" int64 property save', Pos('AJSON.AddPair(''a'',TJSONNumber.Create(a));',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Int64','a','');
- end;
- procedure TTestGenCode.TestSaveDelphiFloatProperty;
- Var
- S : String;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : 1.2 }');
- AssertUnitHeader;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','double');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','double',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- S:=NextLine;
- AssertTrue('Have "a" float property save', Pos('AJSON.AddPair(''a'',TJSONNumber.Create(a));',S)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Double','a','');
- end;
- procedure TTestGenCode.TestSaveDelphiObjectProperty;
- Var
- S : String;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : { "b" : "abc" } }');
- AssertUnitHeader;
- AssertClassHeader('Ta','TObject');
- AssertField('b','String');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('b','String',False);
- AssertEnd;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertDestructor;
- AssertSaverDeclaration;
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','Ta');
- AssertSaverImplementationStart('Ta');
- AssertTrue('Have "b" string property save', Pos('AJSON.AddPair(''b'',TJSONString.Create(b));',NextLine)>0);
- AssertEnd;
- AssertClassComment('Object Implementation','TMyObject');
- AssertDestructorImplementation('TMyObject',['a']);
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have check for assigned object property save', Pos('if Assigned(a) then',NextLine)>0);
- S:=NextLine;
- AssertTrue('Have "a" object property save', Pos('AJSON.AddPair(''a'',a.SaveToJSON);',S)>0);
- AssertEnd;
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','TObject');
- end;
- procedure TTestGenCode.TestSaveDelphiStringArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : [ "abc" ] }');
- AssertSaveArray('string','',True);
- end;
- procedure TTestGenCode.TestSaveDelphiBooleanArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : [ true ] }');
- AssertSaveArray('boolean','',True);
- end;
- procedure TTestGenCode.TestSaveDelphiIntegerArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : [ 123 ] }');
- AssertSaveArray('Integer','',True);
- end;
- procedure TTestGenCode.TestSaveDelphiInt64ArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : [ 1234567890123 ] }');
- AssertSaveArray('Int64','',True);
- end;
- procedure TTestGenCode.TestSaveDelphiFloatArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : [ 1.23] }');
- AssertSaveArray('Double','',True);
- end;
- procedure TTestGenCode.TestSaveDelphiObjectArrayProperty;
- begin
- Gen.Options:=[jpoGenerateSave,jpoDelphiJSON];
- GenCode('{ "a" : [ { "b" : "abc" } ] }');
- AssertUnitHeader;
- AssertClassHeader('TaItem','TObject');
- AssertField('b','String');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('b','String',False);
- AssertEnd;
- AssertArrayType('Ta','TaItem');
- AssertArraySaver('Ta','TaItem',True);
- AssertType;
- AssertClassHeader('TMyObject','TObject');
- AssertField('a','Ta');
- AssertVisibility('public');
- AssertSaverDeclaration;
- AssertProperty('a','ta',False);
- AssertEnd;
- AssertImplementation;
- AssertClassComment('Object Implementation','TaItem');
- AssertSaverImplementationStart('TaItem',True);
- AssertTrue('Have "b" string property save', Pos('AJSON.AddPair(''b'',TJSONString.Create(b));',NextLine)>0);
- AssertTrue('end',Pos('end;',NextLine)>0);
- AssertArraySaverImplementation('Ta','','TaItem',True);
- AssertClassComment('Object Implementation','TMyObject');
- AssertSaverImplementationStart('TMyObject');
- AssertTrue('Have "a" array property save', Pos('AJSON.AddPair(''a'',SaveTaToJSON(a));',NextLine)>0);
- AssertEnd('Loader TMyObject');
- AssertUnitEnd;
- AssertPropertyMap('','TMyObject','','TObject');
- AssertPropertyMap('a','Ta','a','');
- end;
- procedure TTestGenCode.TestLoadDelphiStringArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad, jpoDelphiJSON];
- GenCode('{ "a" : [ "abc" ] }');
- AssertLoadArray('string','String',True);
- end;
- procedure TTestGenCode.TestLoadDelphiBooleanArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad, jpoDelphiJSON];
- GenCode('{ "a" : [ true ] }');
- AssertLoadArray('boolean','Boolean',True);
- end;
- procedure TTestGenCode.TestLoadDelphiIntegerArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad, jpoDelphiJSON];
- GenCode('{ "a" : [ 12 ] }');
- AssertLoadArray('integer','Integer',True);
- end;
- procedure TTestGenCode.TestLoadDelphiInt64ArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad, jpoDelphiJSON];
- GenCode('{ "a" : [ 1234567890123 ] }');
- AssertLoadArray('int64','Int64',True);
- end;
- procedure TTestGenCode.TestLoadDelphiFloatArrayProperty;
- begin
- Gen.Options:=[jpoGenerateLoad, jpoDelphiJSON];
- GenCode('{ "a" : [ 1.1 ] }');
- AssertLoadArray('double','Double',True);
- end;
- initialization
- RegisterTest(TTestGenCode);
- end.
|