12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922 |
- unit tctsparser;
- {$mode ObjFPC}{$H+}
- interface
- uses
- Classes, SysUtils, testregistry, tcparser, jsscanner, jsbase, jstree, jstoken;
- Type
- { TTestTypeScriptParser }
- TTestTypeScriptParser = Class(TTestBaseJSParser)
- private
- Public
- Procedure StartTS(aSource : String);
- procedure CheckMembers(M : TJSSourceElements; aVars,aFunctions,aStatements,aClasses,aModules,aNamespaces,aTypes : Integer);
- Published
- Procedure TestDeclareModule;
- Procedure TestDeclareModuleIdentifier;
- Procedure TestDeclareNamespace;
- Procedure TestDeclareGlobal;
- Procedure TestDeclareUniqueConst;
- Procedure TestDeclareFunction;
- Procedure TestDeclareFunctionOptionalArg;
- Procedure TestDeclareFunctionSpreadArg;
- Procedure TestDeclareFunctionLiteralArg;
- Procedure TestDeclareTypeAlias;
- Procedure TestDeclareTypeAliasDotted;
- Procedure TestDeclareTypeTypeQuery;
- Procedure TestDeclareTypeUnion;
- Procedure TestDeclareTypeUnionConsts;
- Procedure TestDeclareTypeUnionAllowEmpty;
- Procedure TestDeclareUnionTuple;
- Procedure TestDeclareUnionIntersectionType;
- Procedure TestDeclareTypeTuple;
- Procedure TestDeclareTypeArray;
- Procedure TestDeclareTypeArrayOfUnionType;
- Procedure TestDeclareTypeArrayOfFunctionType;
- Procedure TestDeclareTypeArrayGeneric;
- Procedure TestDeclareTypeArrayGenericConst;
- Procedure TestDeclareTypeArrayKeyOf;
- Procedure TestDeclareTypeGeneric;
- Procedure TestDeclareTypeGenericGeneric;
- Procedure TestDeclareTypeGenericNested;
- procedure TestDeclareTypeGenericNestedTwice;
- Procedure TestDeclareTypeGenericAssigned;
- Procedure TestDeclareTypeGenericConstSubtype;
- Procedure TestDeclareTypeObject;
- Procedure TestDeclareTypeObjectLineBreak;
- Procedure TestDeclareTypeObjectPropRef;
- procedure TestDeclareTypeObjectIndexSignature;
- Procedure TestDeclareTypeArrowFunction;
- Procedure TestDeclareTypeArrowFunctionShort;
- Procedure TestDeclareTypeArrowFunctionTwoArgs;
- Procedure TestDeclareTypeArrowFunctionArgsCommaEnd;
- procedure TestDeclareTypeGenericConstraint;
- procedure TestDeclareTypeTypeImport;
- procedure TestDeclareTypeTypeOfImport;
- procedure TestDeclareTypeTypeOfDefault;
- procedure TestDeclareTypeReadonly;
- procedure TestDeclareArgTypeInferred;
- Procedure TestDeclareEnum;
- Procedure TestDeclareEnumKeywordElement;
- Procedure TestDeclareConstEnum;
- Procedure TestDeclareConstEnumAssigned;
- procedure TestDeclareInterfaceEmpty;
- procedure TestDeclareAmbientInterfaceEmpty;
- procedure TestDeclareInterfaceExtendsEmpty;
- procedure TestDeclareInterfaceExtendsTwoEmpty;
- procedure TestDeclareInterfaceProperty;
- procedure TestDeclareInterfaceOptionalProperty;
- procedure TestDeclareInterfaceUntypedProperty;
- procedure TestDeclareInterfaceOptionalUntypedProperty;
- procedure TestDeclareInterfaceMethod;
- procedure TestDeclareInterfaceMethodNoReturn;
- procedure TestDeclareInterfaceCallable;
- procedure TestDeclareInterfaceMethodThisReturn;
- procedure TestDeclateInterfaceGenericProperty;
- procedure TestDeclateInterfaceGeneric;
- procedure TestDeclareInterfaceExtendsGeneric;
- Procedure TestDeclareInterfaceHidden;
- procedure TestDeclareClassEmpty;
- procedure TestDeclareAbstractClassEmpty;
- procedure TestDeclareClassIndexSignature;
- procedure TestDeclareClassIndexSignatureIn;
- procedure TestDeclareClassExtendsGeneric;
- procedure TestDeclareClassGeneric;
- procedure TestDeclareClassStaticFunction;
- procedure TestDeclareClassStaticFunctionUntypedArg;
- procedure TestDeclareClassStaticReadonlyProperty;
- procedure TestDeclareClassReadonlyProperty;
- procedure TestDeclareClassGenericFunctionProperty;
- procedure TestDeclareClassImplements;
- procedure TestDeclareClassExtendsFunctionCall;
- Procedure TestDeclareClassStaticReadOnly;
- procedure TestDeclareInterfaceIndexSignature;
- procedure TestDeclareInterfaceFixedStringProperty;
- procedure TestDeclareInterfaceFixedBooleanProperty;
- procedure TestDeclareInterfaceFixedUnionProperty;
- procedure TestDeclareInterfaceDestructuredFunctionProperty;
- procedure TestDeclareInterfaceNoSemicolon;
- procedure TestDeclareConstructorSignature;
- procedure TestDeclareFunctionDestructuredParam;
- procedure TestDeclareFunctionIs;
- procedure TestDeclareFunctionThisParam;
- procedure TestExportNamespacedClass;
- procedure TestExportAbstractClass;
- procedure TestExportClassConstructor;
- procedure TestExportInterface;
- procedure TestExportInterfaceDefault;
- procedure TestExportInterfaceIndexSignature;
- procedure TestExportInterfaceIndexSignatureOptional;
- procedure TestExportImportStatement;
- procedure TestExportAssignStatement;
- procedure TestExportAsNamespace;
- procedure TestExportNamespaceClass;
- procedure TestExportDefaultFunction;
- procedure TestExportFunction;
- procedure TestExportTypeArrowFunctionArgsComma;
- procedure TestDeclareExportInterfaceDestructuredFunctionProperty;
- procedure TestExportEnum;
- procedure TestExportObjectUnion;
- Procedure TestExportNoSemicolon;
- Procedure TestExportAsKeyWord;
- procedure TestNamespaceInterfaceFUnction;
- end;
- implementation
- { TTestTypeScriptParser }
- procedure TTestTypeScriptParser.StartTS(aSource: String);
- begin
- CreateParser(aSource,ecma2021,True);
- end;
- procedure TTestTypeScriptParser.CheckMembers(M : TJSSourceElements; aVars, aFunctions, aStatements, aClasses, aModules, aNamespaces,aTypes: Integer);
- begin
- AssertEquals('functions count',aFunctions,M.Functions.Count);
- AssertEquals('vars count',aVars,M.Vars.Count);
- AssertEquals('Statements count',aStatements,M.Statements.Count);
- AssertEquals('classes count',aClasses,M.Classes.Count);
- AssertEquals('namespaces count',aNamespaces,M.NameSpaces.Count);
- AssertEquals('Modules count',aModules,M.Modules.Count);
- AssertEquals('Types count',aTypes,M.Modules.Count);
- end;
- procedure TTestTypeScriptParser.TestDeclareModule;
- Var
- M : TJSModuleDeclaration;
- begin
- StartTS('declare module "a" { }');
- M:=GetFirstModule;
- AssertEquals('Name','a',M.Name);
- CheckMembers(M.Members,0,0,0,0,0,0,0);
- end;
- procedure TTestTypeScriptParser.TestDeclareModuleIdentifier;
- Var
- M : TJSModuleDeclaration;
- begin
- StartTS('declare module a { }');
- M:=GetFirstModule;
- AssertEquals('Name','a',M.Name);
- CheckMembers(M.Members,0,0,0,0,0,0,0);
- end;
- procedure TTestTypeScriptParser.TestDeclareNamespace;
- Var
- N : TJSNamespaceDeclaration;
- begin
- StartTS('declare namespace a { }');
- N:=GetFirstNamespace;
- AssertEquals('Name','a',N.Name);
- CheckMembers(N.Members,0,0,0,0,0,0,0);
- end;
- procedure TTestTypeScriptParser.TestDeclareGlobal;
- Var
- N : TJSNamespaceDeclaration;
- begin
- StartTS('declare global { }');
- N:=GetFirstNamespace;
- AssertEquals('Name','',N.Name);
- AssertEquals('Global',True,N.IsGlobal);
- CheckMembers(N.Members,0,0,0,0,0,0,0);
- end;
- procedure TTestTypeScriptParser.TestDeclareUniqueConst;
- Var
- V : TJSVarDeclaration;
- begin
- StartTS('const A : unique symbol');
- V:=TJSVarDeclaration(CheckClass('Var',TJSVarDeclaration,GetFirstVar));
- AssertEquals('Unique ',True,V.IsUnique);
- end;
- procedure TTestTypeScriptParser.TestDeclareFunction;
- Var
- F : TJSFunctionDeclarationStatement;
- begin
- StartTS('declare function a (b : number) : string ;');
- F:=GetFirstFunction;
- AssertEquals('Name','a',F.AFunction.Name);
- AssertNull('No body',F.AFunction.Body);
- AssertNotNull('Have params',F.AFunction.TypedParams);
- AssertEquals('Param Count',1,F.AFunction.TypedParams.Count);
- AssertEquals('Param 1 name','b',F.AFunction.TypedParams.Names[0]);
- AssertEquals('Param 1 optional',False,F.AFunction.TypedParams.Params[0].IsOptional);
- end;
- procedure TTestTypeScriptParser.TestDeclareFunctionOptionalArg;
- Var
- F : TJSFunctionDeclarationStatement;
- begin
- StartTS('declare function a (b ? : number) : string ;');
- F:=GetFirstFunction;
- AssertEquals('Name','a',F.AFunction.Name);
- AssertNull('No body',F.AFunction.Body);
- AssertNotNull('Have params',F.AFunction.TypedParams);
- AssertEquals('Param Count',1,F.AFunction.TypedParams.Count);
- AssertEquals('Param 1 name','b',F.AFunction.TypedParams.Names[0]);
- AssertEquals('Param 1 optional',True,F.AFunction.TypedParams.Params[0].IsOptional);
- end;
- procedure TTestTypeScriptParser.TestDeclareFunctionSpreadArg;
- Var
- F : TJSFunctionDeclarationStatement;
- begin
- StartTS('declare function a (...b ? : number) : string ;');
- F:=GetFirstFunction;
- AssertEquals('Name','a',F.AFunction.Name);
- AssertNull('No body',F.AFunction.Body);
- AssertNotNull('Have params',F.AFunction.TypedParams);
- AssertEquals('Param Count',1,F.AFunction.TypedParams.Count);
- AssertEquals('Param 1 name','b',F.AFunction.TypedParams.Names[0]);
- AssertEquals('Param 1 optional',True,F.AFunction.TypedParams.Params[0].IsOptional);
- AssertEquals('Param 1 spread',True,F.AFunction.TypedParams.Params[0].IsSpread);
- end;
- procedure TTestTypeScriptParser.TestDeclareFunctionLiteralArg;
- Var
- F : TJSFunctionDeclarationStatement;
- R : TJSFixedValueReference;
- begin
- StartTS('declare function a (b : ''number'') : string ;');
- F:=GetFirstFunction;
- AssertEquals('Name','a',F.AFunction.Name);
- AssertNull('No body',F.AFunction.Body);
- AssertNotNull('Have params',F.AFunction.TypedParams);
- AssertEquals('Param Count',1,F.AFunction.TypedParams.Count);
- AssertEquals('Param 1 name','b',F.AFunction.TypedParams.Names[0]);
- AssertEquals('Param 1 optional',False,F.AFunction.TypedParams.Params[0].IsOptional);
- AssertEquals('Param 1 spread',False,F.AFunction.TypedParams.Params[0].IsSpread);
- AssertNotNull('Param 1 type',F.AFunction.TypedParams.Types[0]);
- R:=TJSFixedValueReference(CheckClass('Param 1 type',TJSFixedValueReference,F.AFunction.TypedParams.Types[0]));
- AssertNotNull('Have Fixedvalue',R.FixedValue);
- AssertNotNull('Have Fixedvalue.Value',R.FixedValue.Value);
- AssertEquals('Fixed value','number',R.FixedValue.Value.AsString);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeAlias;
- Var
- T : TJSTypeDeclaration;
- begin
- StartTS('type a = b;');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSTypeReference,T.TypeDef.ClassType);
- AssertEquals('Correct name def class','b',TJSTypeReference(T.TypeDef).Name);
- AssertEquals('Correct IsTypeOf',False,TJSTypeReference(T.TypeDef).IsTypeOf);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeAliasDotted;
- Var
- T : TJSTypeDeclaration;
- begin
- StartTS('type a = b.c;');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSTypeReference,T.TypeDef.ClassType);
- AssertEquals('Correct name def class','b.c',TJSTypeReference(T.TypeDef).Name);
- AssertEquals('Correct isTypeOf',False,TJSTypeReference(T.TypeDef).IsTypeOf);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeTypeQuery;
- Var
- T : TJSTypeDeclaration;
- begin
- StartTS('type a = typeof b;');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSTypeReference,T.TypeDef.ClassType);
- AssertEquals('Correct name def class','b',TJSTypeReference(T.TypeDef).Name);
- AssertEquals('Correct name def class',True,TJSTypeReference(T.TypeDef).IsTypeOf);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeUnion;
- Var
- T : TJSTypeDeclaration;
- U : TJSUnionTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type a = string | number');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSUnionTypeDef,T.TypeDef.ClassType);
- U:=TJSUnionTypeDef(T.TypeDef);
- AssertEquals('Correct number of elements',2,U.TypeCount);
- AssertEquals('Correct type of element 0',TJSTypeReference, U.Types[0].ClassType);
- R:=U.Types[0] as TJSTypeReference;
- AssertEquals('Name type 0','string',R.Name);
- AssertEquals('Correct type of element 0',TJSTypeReference, U.Types[1].ClassType);
- R:=U.Types[1] as TJSTypeReference;
- AssertEquals('Name type 1','number',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeUnionConsts;
- Var
- T : TJSTypeDeclaration;
- U : TJSUnionTypeDef;
- R : TJSFixedValueReference;
- begin
- StartTS('type a = "string" | "number"');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSUnionTypeDef,T.TypeDef.ClassType);
- U:=TJSUnionTypeDef(T.TypeDef);
- AssertEquals('Correct number of elements',2,U.TypeCount);
- AssertEquals('Correct type of element 0',TJSFixedValueReference, U.Types[0].ClassType);
- R:=U.Types[0] as TJSFixedValueReference;
- AssertEquals('Name type 0','string',R.FixedValue.Value.AsString);
- AssertEquals('Correct type of element 0',TJSFixedValueReference, U.Types[1].ClassType);
- R:=U.Types[1] as TJSFixedValueReference;
- AssertEquals('Name type 1','number',R.FixedValue.Value.AsString);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeUnionAllowEmpty;
- Var
- T : TJSTypeDeclaration;
- U : TJSUnionTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type a = | string | number');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSUnionTypeDef,T.TypeDef.ClassType);
- U:=TJSUnionTypeDef(T.TypeDef);
- AssertEquals('Allow empty ',True,U.AllowEmpty);
- AssertEquals('Correct number of elements',2,U.TypeCount);
- AssertEquals('Correct type of element 0',TJSTypeReference, U.Types[0].ClassType);
- R:=U.Types[0] as TJSTypeReference;
- AssertEquals('Name type 0','string',R.Name);
- AssertEquals('Correct type of element 0',TJSTypeReference, U.Types[1].ClassType);
- R:=U.Types[1] as TJSTypeReference;
- AssertEquals('Name type 1','number',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareUnionTuple;
- Var
- T : TJSTypeDeclaration;
- begin
- StartTS('declare type Color = string | [number, number, number, number] | ColorObject;');
- T:=GetFirstType;
- AssertEquals('Name','Color',T.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareUnionIntersectionType;
- Var
- T : TJSTypeDeclaration;
- U : TJSUnionTypeDef;
- begin
- StartTs('declare type MyType = number | (string | number) ;');
- T:=GetFirstType;
- AssertEquals('Name','MyType',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSUnionTypeDef,T.TypeDef.ClassType);
- U:=TJSUnionTypeDef(T.TypeDef);
- AssertEquals('Correct number of elements',2,U.TypeCount);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeTuple;
- Var
- T : TJSTypeDeclaration;
- U : TJSTupleTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type a = [string , number]');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSTupleTypeDef,T.TypeDef.ClassType);
- U:=TJSTupleTypeDef(T.TypeDef);
- AssertEquals('Correct number of elements',2,U.TypeCount);
- AssertEquals('Correct type of element 0',TJSTypeReference, U.Types[0].ClassType);
- R:=U.Types[0] as TJSTypeReference;
- AssertEquals('Name type 0','string',R.Name);
- AssertEquals('Correct type of element 0',TJSTypeReference, U.Types[1].ClassType);
- R:=U.Types[1] as TJSTypeReference;
- AssertEquals('Name type 1','number',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArray;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrayTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type a = string[]');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSArrayTypeDef,T.TypeDef.ClassType);
- A:=TJSArrayTypeDef(T.TypeDef);
- AssertNotNull('have base type',A.BaseType);
- AssertEquals('Correct type of base type',TJSTypeReference, A.BaseType.ClassType);
- R:=A.BaseType as TJSTypeReference;
- AssertEquals('Name base type','string',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrayOfUnionType;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrayTypeDef;
- U : TJSUnionTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type a = (string | number)[]');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- A:=TJSArrayTypeDef(CheckClass(T.TypeDef,TJSArrayTypeDef,'Type def class'));
- U:=TJSUnionTypeDef(CheckClass(A.BaseType,TJSUnionTypeDef,'base type Union class '));
- AssertEquals('Union Count',2,U.TypeCount);
- R:=TJSTypeReference(CheckClass(U.Types[0],TJSTypeReference,'Union class element 0'));
- AssertEquals('Name base type','string',R.Name);
- R:=TJSTypeReference(CheckClass(U.Types[1],TJSTypeReference,'Union class element 1'));
- AssertEquals('Name base type','number',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrayOfFunctionType;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrayTypeDef;
- F : TJSArrowFunctionTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type a = (() => string)[]');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- A:=TJSArrayTypeDef(CheckClass(T.TypeDef,TJSArrayTypeDef,'Type def class'));
- F:=TJSArrowFunctionTypeDef(CheckClass(A.BaseType,TJSArrowFunctionTypeDef,'Have arrow function'));
- AssertNotNull('Have function definition',F.aFunction);
- R:=TJSTypeReference(CheckClass(F.aFunction.ResultType,TJSTypeReference,'Have function result'));
- AssertEquals('result type name','string',R.Name);
- AssertEquals('function argument count',0,F.aFunction.TypedParams.Count);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrayKeyOf;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrayTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type a = string[keyof B]');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSArrayTypeDef,T.TypeDef.ClassType);
- A:=TJSArrayTypeDef(T.TypeDef);
- AssertNotNull('have base type',A.BaseType);
- AssertEquals('Correct type of base type',TJSTypeReference, A.BaseType.ClassType);
- R:=A.BaseType as TJSTypeReference;
- AssertEquals('Name base type','string',R.Name);
- AssertEquals('Correct type of base type',TJSTypeReference, A.IndexType.ClassType);
- R:=A.IndexType as TJSTypeReference;
- AssertEquals('Name base type','B',R.Name);
- AssertEquals('Keyof type',True,R.IsKeyOf);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrayGeneric;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrayTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type a = Array<string>');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSArrayTypeDef,T.TypeDef.ClassType);
- A:=TJSArrayTypeDef(T.TypeDef);
- AssertNotNull('have base type',A.BaseType);
- AssertEquals('Correct type of base type',TJSTypeReference, A.BaseType.ClassType);
- R:=A.BaseType as TJSTypeReference;
- AssertEquals('Name base type','string',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrayGenericConst;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrayTypeDef;
- U : TJSUnionTypeDef;
- begin
- StartTS('type a = Array<"params" | "query" | "headers" | "body">;');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSArrayTypeDef,T.TypeDef.ClassType);
- A:=TJSArrayTypeDef(T.TypeDef);
- AssertNotNull('have base type',A.BaseType);
- AssertEquals('Correct type of base type',TJSUnionTypeDef, A.BaseType.ClassType);
- U:=A.BaseType as TJSUnionTypeDef;
- AssertEquals('Element count',4,U.TypeCount);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeGeneric;
- Var
- T : TJSTypeDeclaration;
- G : TJSGenericTypeRef;
- R : TJSTypeReference;
- begin
- StartTS('type a = Shell<string>');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSGenericTypeRef,T.TypeDef.ClassType);
- G:=TJSGenericTypeRef(T.TypeDef);
- AssertNotNull('have base type',G.BaseType);
- AssertEquals('Correct type of base type',TJSTypeReference, G.BaseType.ClassType);
- R:=G.BaseType as TJSTypeReference;
- AssertEquals('Name base type','Shell',R.Name);
- AssertEquals('Correct number of parameters',1, G.ParamTypeCount);
- AssertEquals('Correct type of parameter 0',TJSTypeReference, G.ParamTypes[0].Classtype);
- R:=G.ParamTypes[0] as TJSTypeReference;
- AssertEquals('Name base type','string',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeGenericGeneric;
- Var
- T : TJSTypeDeclaration;
- G : TJSTupleTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type Pair<T> = [T,T]');
- T:=GetFirstType;
- AssertEquals('Name','Pair',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct number of parameters',1, T.TypeParams.Count);
- AssertEquals('Correct type of parameter 0',TJSTypeReference, T.TypeParams[0].Node.Classtype);
- R:=T.TypeParams[0].Node as TJSTypeReference;
- AssertEquals('Name base type','T',R.Name);
- AssertEquals('Correct type def class',TJSTupleTypeDef,T.TypeDef.ClassType);
- G:=TJSTupleTypeDef(T.TypeDef);
- AssertEquals('Correct number of parameters',2, G.TypeCount);
- AssertEquals('Correct type of parameter 0',TJSTypeReference, G.Types[0].Classtype);
- R:=G.Types[0] as TJSTypeReference;
- AssertEquals('Name base type','T',R.Name);
- AssertEquals('Correct type of parameter 1',TJSTypeReference, G.Types[1].Classtype);
- R:=G.Types[1] as TJSTypeReference;
- AssertEquals('Name base type','T',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeGenericNested;
- Var
- T : TJSTypeDeclaration;
- G : TJSGenericTypeRef;
- R : TJSTypeReference;
- begin
- StartTS('type a = A<Q,B<C>>;');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSGenericTypeRef,T.TypeDef.ClassType);
- G:=TJSGenericTypeRef(T.TypeDef);
- AssertNotNull('have base type',G.BaseType);
- AssertEquals('Correct type of base type',TJSTypeReference, G.BaseType.ClassType);
- R:=G.BaseType as TJSTypeReference;
- AssertEquals('Name base type','A',R.Name);
- AssertEquals('Correct number of parameters',2, G.ParamTypeCount);
- // Arg 1
- AssertEquals('Correct type of parameter 0',TJSTypeReference, G.ParamTypes[0].Classtype);
- R:=G.ParamTypes[0] as TJSTypeReference;
- AssertEquals('Name base type','Q',R.Name);
- // Arg 2
- AssertEquals('Correct type of base type',TJSGenericTypeRef, G.ParamTypes[1].Classtype);
- G:=G.ParamTypes[1] as TJSGenericTypeRef;
- AssertNotNull('have base type',G.BaseType);
- AssertEquals('Correct type of base type',TJSTypeReference, G.BaseType.ClassType);
- R:=G.BaseType as TJSTypeReference;
- AssertEquals('Name base type','B',R.Name);
- AssertEquals('Correct number of parameters',1, G.ParamTypeCount);
- AssertEquals('Correct type of parameter 0',TJSTypeReference, G.ParamTypes[0].Classtype);
- R:=G.ParamTypes[0] as TJSTypeReference;
- AssertEquals('Name base type','C',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeGenericNestedTwice;
- Var
- T : TJSTypeDeclaration;
- begin
- StartTS('type a = A<Q<B<C<D>>>>;');
- T:=GetFirstType;
- AssertEquals('Name','a',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type def class',TJSGenericTypeRef,T.TypeDef.ClassType);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeGenericAssigned;
- Var
- T : TJSTypeDeclaration;
- R : TJSTypeReference;
- P : TJSNamedParamTypeDef;
- begin
- StartTS('type TA<TEvent = any, TResult = any> = B;');
- T:=TJSTypeDeclaration(CheckClass('First type',TJSTypeDeclaration,GetFirstType));
- R:=TJSTypeReference(CheckClass('Correct type',TJSTypeReference,T.TypeDef));
- AssertEquals('Name','B',R.Name);
- AssertEquals('Type param count',2,T.TypeParams.Count);
- // Param 1
- P:=TJSNamedParamTypeDef(CheckClass('Param 1,',TJSNamedParamTypeDef,T.TypeParams.JSElements[0]));
- R:=TJSTypeReference(CheckClass('Correct type',TJSTypeReference,P.ParamName));
- AssertEquals('Name','TEvent',R.Name);
- R:=TJSTypeReference(CheckClass('Correct type',TJSTypeReference,P.ParamType));
- AssertEquals('Name','any',R.Name);
- // Param 2
- P:=TJSNamedParamTypeDef(CheckClass('Param 2,',TJSNamedParamTypeDef,T.TypeParams.JSElements[1]));
- R:=TJSTypeReference(CheckClass('Correct type',TJSTypeReference,P.ParamName));
- AssertEquals('Name','TResult',R.Name);
- R:=TJSTypeReference(CheckClass('Correct type',TJSTypeReference,P.ParamType));
- AssertEquals('Name','any',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeGenericConstSubtype;
- Var
- T : TJSTypeDeclaration;
- G : TJSGenericTypeRef;
- R : TJSTypeReference;
- begin
- StartTS('type StatusCodeMap = Record<string, "trace" | "debug" | "info" | "warn" | "error">');
- T:=TJSTypeDeclaration(CheckClass('First type',TJSTypeDeclaration,GetFirstType));
- AssertEquals('Name','StatusCodeMap',T.Name);
- G:=TJSGenericTypeRef(CheckClass('Correct type',TJSGenericTypeRef,T.TypeDef));
- R:=TJSTypeReference(CheckClass('Correct type',TJSTypeReference,G.BaseType));
- AssertEquals('Name','Record',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeObject;
- Var
- T : TJSTypeDeclaration;
- O : TJSObjectTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type TreeItem = {left : TreeItem, right : TreeItem};');
- T:=GetFirstType;
- AssertEquals('Name','TreeItem',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type of typedef',TJSObjectTypeDef, T.TypeDef.ClassType);
- O:=TJSObjectTypeDef(T.TypeDef);
- AssertEquals('Correct number of elements',2, O.ElementCount);
- AssertEquals('Correct name of element 0','left', O.Elements[0].Name);
- AssertEquals('Correct type of element 0',TJSTypeReference, O.Elements[0].ElementType.ClassType);
- R:=O.Elements[0].ElementType as TJSTypeReference;
- AssertEquals('Name base type','TreeItem',R.Name);
- AssertEquals('Correct name of element 0','right', O.Elements[1].Name);
- AssertEquals('Correct type of element 1',TJSTypeReference, O.Elements[1].ElementType.ClassType);
- R:=O.Elements[1].ElementType as TJSTypeReference;
- AssertEquals('Name base type','TreeItem',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeObjectLineBreak;
- Var
- T : TJSTypeDeclaration;
- O : TJSObjectTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type TreeItem = {'#10+
- 'left : TreeItem'#10+
- 'right : TreeItem'#10+
- '};');
- T:=GetFirstType;
- AssertEquals('Name','TreeItem',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type of typedef',TJSObjectTypeDef, T.TypeDef.ClassType);
- O:=TJSObjectTypeDef(T.TypeDef);
- AssertEquals('Correct number of elements',2, O.ElementCount);
- AssertEquals('Correct name of element 0','left', O.Elements[0].Name);
- AssertEquals('Correct type of element 0',TJSTypeReference, O.Elements[0].ElementType.ClassType);
- R:=O.Elements[0].ElementType as TJSTypeReference;
- AssertEquals('Name base type','TreeItem',R.Name);
- AssertEquals('Correct name of element 0','right', O.Elements[1].Name);
- AssertEquals('Correct type of element 1',TJSTypeReference, O.Elements[1].ElementType.ClassType);
- R:=O.Elements[1].ElementType as TJSTypeReference;
- AssertEquals('Name base type','TreeItem',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeObjectIndexSignature;
- Var
- T : TJSTypeDeclaration;
- O : TJSObjectTypeDef;
- // R : TJSTypeReference;
- SigDecl: TJSIndexSignatureDeclaration;
- begin
- StartTS('type TreeItem = { [x: string]: never, [x: number]: never };');
- T:=GetFirstType;
- AssertEquals('Name','TreeItem',T.Name);
- AssertNotNull('Have type def',T.TypeDef);
- AssertEquals('Correct type of typedef',TJSObjectTypeDef, T.TypeDef.ClassType);
- O:=TJSObjectTypeDef(T.TypeDef);
- AssertEquals('Correct number of elements',2, O.ElementCount);
- SigDecl:=TJSIndexSignatureDeclaration(CheckClass('Index signature',TJSIndexSignatureDeclaration,O.Elements[0]));
- AssertEquals('No name','',SigDecl.Name);
- AssertEquals('Index type','string',SigDecl.IndexType);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrowFunction;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrowFunctionTypeDef;
- P : TJSTypedParam;
- R : TJSTypeReference;
- begin
- StartTS('type CallBack = (data : t) => void;');
- T:=GetFirstType;
- AssertEquals('Name','CallBack',T.Name);
- A:=TJSArrowFunctionTypeDef(CheckClass(T.TypeDef,TJSArrowFunctionTypeDef,'Have arrow function'));
- AssertNotNull('Have function definition',A.aFunction);
- R:=TJSTypeReference(CheckClass(A.aFunction.ResultType,TJSTypeReference,'Have function result'));
- AssertEquals('result type name','void',R.Name);
- AssertEquals('function argument count',1,A.aFunction.TypedParams.Count);
- P:=A.aFunction.TypedParams.Params[0];
- AssertEquals('param name','data',P.Name);
- R:=TJSTypeReference(CheckClass(P.Node,TJSTypeReference,'Have param type'));
- AssertEquals('param type name','t',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrowFunctionShort;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrowFunctionTypeDef;
- R : TJSTypeReference;
- begin
- StartTS('type CallBack = () => void;');
- T:=GetFirstType;
- AssertEquals('Name','CallBack',T.Name);
- A:=TJSArrowFunctionTypeDef(CheckClass(T.TypeDef,TJSArrowFunctionTypeDef,'Have arrow function'));
- AssertNotNull('Have function definition',A.aFunction);
- R:=TJSTypeReference(CheckClass(A.aFunction.ResultType,TJSTypeReference,'Have function result'));
- AssertEquals('result type name','void',R.Name);
- AssertEquals('function argument count',0,A.aFunction.TypedParams.Count);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrowFunctionTwoArgs;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrowFunctionTypeDef;
- P : TJSTypedParam;
- R : TJSTypeReference;
- begin
- StartTS('type CallBack = (data : t, context: t2) => void;');
- T:=GetFirstType;
- AssertEquals('Name','CallBack',T.Name);
- A:=TJSArrowFunctionTypeDef(CheckClass(T.TypeDef,TJSArrowFunctionTypeDef,'Have arrow function'));
- AssertNotNull('Have function definition',A.aFunction);
- R:=TJSTypeReference(CheckClass(A.aFunction.ResultType,TJSTypeReference,'Have function result'));
- AssertEquals('result type name','void',R.Name);
- AssertEquals('function argument count',2,A.aFunction.TypedParams.Count);
- P:=A.aFunction.TypedParams.Params[0];
- AssertEquals('param name','data',P.Name);
- R:=TJSTypeReference(CheckClass(P.Node,TJSTypeReference,'Have param 0 type'));
- AssertEquals('param type name','t',R.Name);
- P:=A.aFunction.TypedParams.Params[1];
- AssertEquals('param name','context',P.Name);
- R:=TJSTypeReference(CheckClass(P.Node,TJSTypeReference,'Have param 1 type'));
- AssertEquals('param type name','t2',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeArrowFunctionArgsCommaEnd;
- Var
- T : TJSTypeDeclaration;
- A : TJSArrowFunctionTypeDef;
- P : TJSTypedParam;
- R : TJSTypeReference;
- begin
- StartTS('type CallBack = ( '#10+
- ' reject: FN,'#10+
- ') => void;');
- T:=GetFirstType;
- AssertEquals('Name','CallBack',T.Name);
- A:=TJSArrowFunctionTypeDef(CheckClass(T.TypeDef,TJSArrowFunctionTypeDef,'Have arrow function'));
- AssertNotNull('Have function definition',A.aFunction);
- R:=TJSTypeReference(CheckClass(A.aFunction.ResultType,TJSTypeReference,'Have function result'));
- AssertEquals('result type name','void',R.Name);
- AssertEquals('function argument count',1,A.aFunction.TypedParams.Count);
- P:=A.aFunction.TypedParams.Params[0];
- AssertEquals('param name','reject',P.Name);
- R:=TJSTypeReference(CheckClass(P.Node,TJSTypeReference,'Have param 0 type'));
- AssertEquals('param type name','FN',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeObjectPropRef;
- Var
- aDecl : TJSTypeDeclaration;
- ObjType : TJSObjectTypeDef;
- PropType : TJSPropertyDeclaration;
- U : TJSUnionTypeDef;
- A : TJSArrayTypeDef;
- F : TJSFixedValueReference;
- begin
- // rimraf.Options &
- StartTs('type Options = {'#10 +
- ' glob?: rimraf.Options["glob"] | true;'#10 +
- ' disableGlob?: never;'#10 +
- ' };');
- aDecl:=TJSTypeDeclaration(CheckClass('First type',TJSTypeDeclaration,GetFirstType));
- ObjType:=TJSObjectTypeDef(CheckClass('a type',TJSObjectTypeDef,aDecl.TypeDef));
- PropType:=TJSPropertyDeclaration(CheckClass('First prop',TJSPropertyDeclaration,ObjType.Elements[0]));
- U:=TJSUnionTypeDef(CheckClass('Prop type',TJSUnionTypeDef,PropType.ElementType));
- A:=TJSArrayTypeDef(CheckClass('First el',TJSArrayTypeDef,U.Types[0]));
- F:=TJSFixedValueReference(CheckClass('Array Index',TJSFixedValueReference,A.IndexType));
- AssertEquals('value','glob',F.FixedValue.Value.AsString);
- end;
- procedure TTestTypeScriptParser.TestDeclareEnum;
- Var
- E : TJSEnumDeclaration;
- ET : TJSEnumTypeDef;
- begin
- StartTS('enum Colors {red,blue,green};');
- E:=GetFirstEnum;
- AssertEquals('Name','Colors',E.Name);
- ET:=TJSEnumTypeDef(CheckClass(E.EnumDef,TJSEnumTypeDef,'Have enum definition'));
- AssertEquals('Member count',3,ET.NameCount);
- AssertEquals('Member 0','red',ET.Names[0]);
- AssertEquals('Member 1','blue',ET.Names[1]);
- AssertEquals('Member 2','green',ET.Names[2]);
- end;
- procedure TTestTypeScriptParser.TestDeclareEnumKeywordElement;
- Var
- E : TJSEnumDeclaration;
- ET : TJSEnumTypeDef;
- begin
- StartTS('enum Colors {delete,new,green};');
- E:=GetFirstEnum;
- AssertEquals('Name','Colors',E.Name);
- ET:=TJSEnumTypeDef(CheckClass(E.EnumDef,TJSEnumTypeDef,'Have enum definition'));
- AssertEquals('Member count',3,ET.NameCount);
- AssertEquals('Member 0','delete',ET.Names[0]);
- AssertEquals('Member 1','new',ET.Names[1]);
- AssertEquals('Member 2','green',ET.Names[2]);
- end;
- procedure TTestTypeScriptParser.TestDeclareConstEnum;
- Var
- Stat : TJSEnumStatement;
- E : TJSEnumDeclaration;
- ET : TJSEnumTypeDef;
- begin
- StartTS('const enum Colors {red,blue,green};');
- Stat:=TJSEnumStatement(CheckClass('First statement',TJSEnumStatement,GetFirstStatement));
- E:=TJSEnumDeclaration(CheckClass('Decl',TJSEnumDeclaration,Stat.EnumDecl));
- AssertEquals('Name','Colors',E.Name);
- ET:=TJSEnumTypeDef(CheckClass(E.EnumDef,TJSEnumTypeDef,'Have enum definition'));
- AssertEquals('Is const',True,ET.IsConst);
- AssertEquals('Member count',3,ET.NameCount);
- AssertEquals('Member 0','red',ET.Names[0]);
- AssertEquals('Member 1','blue',ET.Names[1]);
- AssertEquals('Member 2','green',ET.Names[2]);
- end;
- procedure TTestTypeScriptParser.TestDeclareConstEnumAssigned;
- Var
- Stat : TJSEnumStatement;
- E : TJSEnumDeclaration;
- ET : TJSEnumTypeDef;
- Lit : TJSLiteral;
- begin
- StartTS('const enum Colors {red = 1,blue = 2,green};');
- Stat:=TJSEnumStatement(CheckClass('First statement',TJSEnumStatement,GetFirstStatement));
- E:=TJSEnumDeclaration(CheckClass('Decl',TJSEnumDeclaration,Stat.EnumDecl));
- AssertEquals('Name','Colors',E.Name);
- ET:=TJSEnumTypeDef(CheckClass(E.EnumDef,TJSEnumTypeDef,'Have enum definition'));
- AssertEquals('Is const',True,ET.IsConst);
- AssertEquals('Member count',3,ET.NameCount);
- AssertEquals('Member 0','red',ET.Names[0]);
- lit:=TJSLiteral(CheckClass('Member 0 assigned',TJSLiteral,ET.Elements[0].Value));
- AssertEquals('Lit value',1,Lit.Value.AsNumber);
- AssertEquals('Member 1','blue',ET.Names[1]);
- lit:=TJSLiteral(CheckClass('Member 1 assigned',TJSLiteral,ET.Elements[1].Value));
- AssertEquals('Lit value',2,Lit.Value.AsNumber);
- AssertEquals('Member 2','green',ET.Names[2]);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceEmpty;
- Var
- Decl : TJSInterfaceDeclaration;
- begin
- StartTS('interface Empty {};');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','Empty',Decl.Name);
- AssertNull('No Extends',Decl.Extends);
- // AssertEquals('Extends count',0,Decl.Extends.Count);
- AssertEquals('Members count',0,Decl.Values.Count);
- end;
- procedure TTestTypeScriptParser.TestDeclareAmbientInterfaceEmpty;
- Var
- Decl : TJSInterfaceDeclaration;
- begin
- StartTS('declare interface Empty {};');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertEquals('First type node is type declaration',True,GetInterfaces.Nodes[0].IsAmbient);
- AssertNotNull('Have declaration');
- AssertEquals('Name','Empty',Decl.Name);
- AssertNull('No Extends',Decl.Extends);
- // AssertEquals('Extends count',0,Decl.Extends.Count);
- AssertEquals('Members count',0,Decl.Values.Count);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceExtendsEmpty;
- Var
- Decl : TJSInterfaceDeclaration;
- Lit : TJSLiteral;
- begin
- StartTS('interface Empty extends ParentEmpty {};');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','Empty',Decl.Name);
- AssertNotNull('Extends',Decl.Extends);
- AssertEquals('Extends count',1,Decl.Extends.Count);
- Lit:=TJSLiteral(CheckClass(Decl.Extends.Nodes[0].Node,TJSLiteral,'Literal 0 '));
- AssertNotNull('Lit has value',Lit.Value);
- AssertEquals('Extends name','ParentEmpty',Lit.Value.AsString);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceExtendsTwoEmpty;
- Var
- Decl : TJSInterfaceDeclaration;
- Lit : TJSLiteral;
- begin
- StartTS('interface Empty extends ParentEmpty,MoreEmpty {};');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','Empty',Decl.Name);
- AssertNotNull('Extends',Decl.Extends);
- AssertEquals('Extends count',2,Decl.Extends.Count);
- Lit:=TJSLiteral(CheckClass(Decl.Extends.Nodes[0].Node,TJSLiteral,'Literal 0 '));
- AssertNotNull('Lit has value',Lit.Value);
- AssertEquals('Extends name','ParentEmpty',Lit.Value.AsString);
- Lit:=TJSLiteral(CheckClass(Decl.Extends.Nodes[1].Node,TJSLiteral,'Literal 0 '));
- AssertNotNull('Lit has value',Lit.Value);
- AssertEquals('Extends name','MoreEmpty',Lit.Value.AsString);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceProperty;
- Var
- Decl : TJSInterfaceDeclaration;
- Prop : TJSPropertyDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface Friend { name: string; };');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','Friend',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertEquals('Member count',1,Decl.ElementCount);
- Prop:=TJSPropertyDeclaration(CheckClass('Property class',TJSPropertyDeclaration,Decl.Elements[0]));
- AssertEquals('Property name','name',Prop.Name);
- AssertEquals('Property optional',koDefault,Prop.Optional);
- R:=TJSTypeReference(CheckClass('Property type',TJSTypeReference,Prop.ElementType));
- AssertEquals('Property type name','string',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceOptionalProperty;
- Var
- Decl : TJSInterfaceDeclaration;
- Prop : TJSPropertyDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface Friend { name ? : string; };');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','Friend',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertEquals('Member count',1,Decl.ElementCount);
- Prop:=TJSPropertyDeclaration(CheckClass('Property class',TJSPropertyDeclaration,Decl.Elements[0]));
- AssertEquals('Property name','name',Prop.Name);
- AssertEquals('Property optional',koOptional,Prop.Optional);
- R:=TJSTypeReference(CheckClass('Property type',TJSTypeReference,Prop.ElementType));
- AssertEquals('Property type name','string',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceUntypedProperty;
- Var
- Decl : TJSInterfaceDeclaration;
- Prop : TJSPropertyDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface Friend { name ; };');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','Friend',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertEquals('Member count',1,Decl.ElementCount);
- Prop:=TJSPropertyDeclaration(CheckClass('Property class',TJSPropertyDeclaration,Decl.Elements[0]));
- AssertEquals('Property name','name',Prop.Name);
- AssertEquals('Property optional',koDefault,Prop.Optional);
- R:=TJSTypeReference(CheckClass('Property type',TJSTypeReference,Prop.ElementType));
- AssertEquals('Property type name','any',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceOptionalUntypedProperty;
- Var
- Decl : TJSInterfaceDeclaration;
- Prop : TJSPropertyDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface Friend { name ? ; };');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','Friend',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertEquals('Member count',1,Decl.ElementCount);
- Prop:=TJSPropertyDeclaration(CheckClass('Property class',TJSPropertyDeclaration,Decl.Elements[0]));
- AssertEquals('Property name','name',Prop.Name);
- AssertEquals('Property optional',koOptional,Prop.Optional);
- R:=TJSTypeReference(CheckClass('Property type',TJSTypeReference,Prop.ElementType));
- AssertEquals('Property type name','any',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceMethod;
- Var
- Decl : TJSInterfaceDeclaration;
- M : TJSMethodDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface JQuery { text (content: string) : string; };');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertEquals('Member count',1,Decl.ElementCount);
- M:=TJSMethodDeclaration(CheckClass('Method class',TJSMethodDeclaration,Decl.Elements[0]));
- AssertEquals('Method name','text',M.Name);
- AssertEquals('Method optional',koDefault,M.Optional);
- AssertNotNull('Have function def',M.FuncDef);
- R:=TJSTypeReference(CheckClass('Result type',TJSTypeReference,M.FuncDef.ResultType));
- AssertEquals('Property type name','string',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceMethodNoReturn;
- Var
- Decl : TJSInterfaceDeclaration;
- M : TJSMethodDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface JQuery { text (content: string) ; };');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertEquals('Member count',1,Decl.ElementCount);
- M:=TJSMethodDeclaration(CheckClass('Method class',TJSMethodDeclaration,Decl.Elements[0]));
- AssertEquals('Method name','text',M.Name);
- AssertEquals('Method optional',koDefault,M.Optional);
- AssertNotNull('Have function def',M.FuncDef);
- R:=TJSTypeReference(CheckClass('Result type',TJSTypeReference,M.FuncDef.ResultType));
- AssertEquals('Property type name','any',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceCallable;
- Var
- Decl : TJSInterfaceDeclaration;
- M : TJSMethodDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface JQuery { (query : string) : JQuery; };');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertEquals('Member count',1,Decl.ElementCount);
- M:=TJSMethodDeclaration(CheckClass('Method class',TJSMethodDeclaration,Decl.Elements[0]));
- AssertEquals('Method name','',M.Name);
- AssertEquals('Method optional',koDefault,M.Optional);
- AssertNotNull('Have function def',M.FuncDef);
- R:=TJSTypeReference(CheckClass('Result type',TJSTypeReference,M.FuncDef.ResultType));
- AssertEquals('Property type name','JQuery',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceMethodThisReturn;
- Var
- Decl : TJSInterfaceDeclaration;
- M : TJSMethodDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface JQuery { text (content: string) : this; };');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertEquals('Member count',1,Decl.ElementCount);
- M:=TJSMethodDeclaration(CheckClass('Method class',TJSMethodDeclaration,Decl.Elements[0]));
- AssertEquals('Method name','text',M.Name);
- AssertEquals('Method optional',koDefault,M.Optional);
- AssertNotNull('Have function def',M.FuncDef);
- R:=TJSTypeReference(CheckClass('Result type',TJSTypeReference,M.FuncDef.ResultType));
- AssertEquals('Property type name','this',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclateInterfaceGenericProperty;
- Var
- Decl:TJSInterfaceDeclaration;
- Prop: TJSPropertyDeclaration;
- R: TJSTypeReference;
- U : TJSUnionTypeDef;
- G : TJSGenericTypeRef;
- begin
- STartTS('export interface CalendarBaseProps { '+
- ' dayComponent?: React.Component<DayComponentProps> | React.SFC<DayComponentProps>; '+
- ' disabledByDefault?: boolean;'+
- '};');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertEquals('Count elements',2,Decl.ElementCount);
- Prop:=TJSPropertyDeclaration(CheckClass('Property class',TJSPropertyDeclaration,Decl.Elements[0]));
- AssertEquals('Property name','dayComponent',Prop.Name);
- AssertEquals('Property optional',koOptional,Prop.Optional);
- U:=TJSUnionTypeDef(CheckClass('Property type',TJSUnionTypeDef,Prop.ElementType));
- G:=TJSGenericTypeRef(CheckClass('Union 1',TJSGenericTypeRef,U.Types[0]));
- R:=TJSTypeReference(CheckClass('Generic base type',TJSTypeReference,G.BaseType));
- AssertEquals('Generic 1 base type Name ','React.Component',R.Name);
- G:=TJSGenericTypeRef(CheckClass('Union 2',TJSGenericTypeRef,U.Types[1]));
- R:=TJSTypeReference(CheckClass('Generic base type',TJSTypeReference,G.BaseType));
- AssertEquals('Generic 2 base type Name ','React.SFC',R.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclateInterfaceGeneric;
- Var
- Decl : TJSInterfaceDeclaration;
- R : TJSTypeReference;
- Lit : TJSLiteral;
- begin
- StartTS('interface Empty <TItem> extends ParentEmpty {};');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration');
- AssertEquals('Name','Empty',Decl.Name);
- AssertNotNull('Extends',Decl.Extends);
- AssertEquals('Type param count',1,Decl.TypeParams.Count);
- R:=TJSTypeReference(CheckClass('Type param 1',TJSTypeReference,Decl.TypeParams.Nodes[0].Node));
- AssertEquals('Type param Name','TItem',R.Name);
- AssertEquals('Extends count',1,Decl.Extends.Count);
- Lit:=TJSLiteral(CheckClass(Decl.Extends.Nodes[0].Node,TJSLiteral,'Literal 0 '));
- AssertNotNull('Lit has value',Lit.Value);
- AssertEquals('Extends name','ParentEmpty',Lit.Value.AsString);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceExtendsGeneric;
- Var
- Decl : TJSInterfaceDeclaration;
- R : TJSTypeReference;
- begin
- StartTS('interface Empty <TItem> extends ParentEmpty<Titem> {};');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration',Decl);
- AssertEquals('Name','Empty',Decl.Name);
- AssertNotNull('Extends',Decl.Extends);
- AssertEquals('Type param count',1,Decl.TypeParams.Count);
- R:=TJSTypeReference(CheckClass('Type param 1',TJSTypeReference,Decl.TypeParams.Nodes[0].Node));
- AssertEquals('Type param Name','TItem',R.Name);
- AssertEquals('Extends count',1,Decl.Extends.Count);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceHidden;
- Var
- Decl : TJSInterfaceDeclaration;
- begin
- StartTS('interface JQuery extends JQuerySlickInitials {'#10+
- ' hidden: ''mozHidden'' | ''webkitHidden'' | ''hidden'';'#10+
- '}');
- Decl:=TJSInterfaceDeclaration(CheckClass(GetFirstInterface,TJSInterfaceDeclaration,'Interface'));
- AssertNotNull('Have declaration',Decl);
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNotNull('Extends',Decl.Extends);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassEmpty;
- Var
- Decl : TJSClassDeclaration;
- begin
- StartTS('declare class JQuery {};');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertNull('Members',Decl.Members);
- end;
- procedure TTestTypeScriptParser.TestDeclareAbstractClassEmpty;
- Var
- Decl : TJSClassDeclaration;
- begin
- StartTS('declare abstract class JQuery {};');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertNull('Members',Decl.Members);
- AssertTrue('Abstract',Decl.IsAbstract);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassIndexSignature;
- Var
- Decl : TJSClassDeclaration;
- SigDecl : TJSIndexSignatureDeclaration;
- begin
- StartTS('class TDictionary { [a : string] : string; } ;');
- Decl:=TJSClassDeclaration(CheckClass('Interface',TJSClassDeclaration,GetFirstClass));
- AssertEquals('Interface name','TDictionary',Decl.Name);
- AssertEquals('One var',1,Decl.Members.Vars.Count);
- SigDecl:=TJSIndexSignatureDeclaration(CheckClass('Index signature',TJSIndexSignatureDeclaration,Decl.Members.Vars[0].Node));
- AssertEquals('No name','',SigDecl.Name);
- AssertEquals('Index type','string',SigDecl.IndexType);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassIndexSignatureIn;
- Var
- Decl : TJSClassDeclaration;
- SigDecl : TJSIndexSignatureDeclaration;
- IndexType : TJSTypeReference;
- begin
- StartTS('class TDictionary { [a in B] : string; } ;');
- Decl:=TJSClassDeclaration(CheckClass('Interface',TJSClassDeclaration,GetFirstClass));
- AssertEquals('Interface name','TDictionary',Decl.Name);
- AssertEquals('One var',1,Decl.Members.Vars.Count);
- SigDecl:=TJSIndexSignatureDeclaration(CheckClass('Index signature',TJSIndexSignatureDeclaration,Decl.Members.Vars[0].Node));
- AssertEquals('No name','',SigDecl.Name);
- IndexType:=TJSTypeReference(CheckClass('Index type',TJSTypeReference,SigDecl.InIndexType));
- AssertEquals('Type ref name','B',IndexType.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassExtendsGeneric;
- Var
- Decl : TJSAmbientClassDeclaration;
- Gen : TJSGenericTypeRef;
- Ref : TJSTypeReference;
- begin
- StartTS('declare class JQuery extends MyClass<any> {};');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- Gen:=TJSGenericTypeRef(CheckClass('Extends class',TJSGenericTypeRef,Decl.Extends));
- Ref:=TJSTypeReference(CheckClass('Base class',TJSTypeReference,Gen.BaseType));
- AssertEquals('Name','MyClass',Ref.Name);
- AssertNull('Members',Decl.Members);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassGeneric;
- Var
- Decl : TJSAmbientClassDeclaration;
- Ref : TJSTypeReference;
- begin
- StartTS('declare class JQuery<any> extends MyClass {};');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- Ref:=TJSTypeReference(CheckClass('Base class',TJSTypeReference,Decl.extends));
- AssertEquals('Name','MyClass',Ref.Name);
- AssertNotNull('Have type params',Decl.TypeParams);
- AssertEquals('Type Param count ',1,Decl.TypeParams.Count);
- Ref:=TJSTypeReference(CheckClass('Base class',TJSTypeReference,Decl.TypeParams.Nodes[0].Node));
- AssertEquals('Name','any',Ref.Name);
- AssertNull('Members',Decl.Members);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassStaticFunction;
- Var
- Decl : TJSClassDeclaration;
- begin
- StartTS('declare class JQuery { static extends() : string; };');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertEquals('Function count',1,Decl.Members.Functions.Count);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassStaticFunctionUntypedArg;
- Var
- Decl : TJSClassDeclaration;
- begin
- StartTS('declare class JQuery { private soso(a) ; };');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertEquals('Function count',1,Decl.Members.Functions.Count);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassStaticReadonlyProperty;
- Var
- Decl : TJSClassDeclaration;
- Prop : TJSPropertyDeclaration;
- begin
- StartTS('declare class JQuery { static readonly a : string; };');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertEquals('Var count',1,Decl.Members.vars.Count);
- Prop:=TJSPropertyDeclaration(CheckClass('Class',TJSPropertyDeclaration,Decl.Members.vars.JSElements[0]));
- AssertTrue('Prop readonly',Prop.IsReadOnly);
- AssertTrue('Prop Static',Prop.IsStatic);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassReadonlyProperty;
- Var
- Decl : TJSClassDeclaration;
- Prop : TJSPropertyDeclaration;
- begin
- StartTS('declare class JQuery { readonly a : string; };');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertEquals('Var count',1,Decl.Members.vars.Count);
- Prop:=TJSPropertyDeclaration(CheckClass('Class',TJSPropertyDeclaration,Decl.Members.vars.JSElements[0]));
- AssertTrue('Prop readonly',Prop.IsReadOnly);
- AssertFalse('Prop Static',Prop.IsStatic);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassGenericFunctionProperty;
- begin
- StartTS('declare class changeRequestInterceptor {'#10+
- ' getRequest: <T>(request: T, entity: Entity, index: number) => T;'#10+
- '}');
- GetFirstClass(True);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassImplements;
- Var
- Decl : TJSClassDeclaration;
- Prop : TJSPropertyDeclaration;
- begin
- StartTS('declare class JQuery implements IQuery { readonly a : string; };');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertEquals('Var count',1,Decl.Members.vars.Count);
- Prop:=TJSPropertyDeclaration(CheckClass('Class',TJSPropertyDeclaration,Decl.Members.vars.JSElements[0]));
- AssertTrue('Prop readonly',Prop.IsReadOnly);
- AssertFalse('Prop Static',Prop.IsStatic);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassExtendsFunctionCall;
- Var
- Decl: TJSAmbientClassDeclaration;
- E : TJSTypeFuncCall;
- begin
- StartTS('declare class TextArea extends Component.extend(TextSupport) {}');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration',Decl);
- AssertEquals('Name','TextArea',Decl.Name);
- E:=TJSTypeFuncCall(CheckClass('Extends',TJSTypeFuncCall,Decl.Extends));
- AssertEquals('Function name','Component.extend',E.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareClassStaticReadOnly;
- Var
- Decl: TJSAmbientClassDeclaration;
- E : TJSClassConstDeclaration;
- begin
- StartTS('declare class A { static readonly B = 1 }');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration',Decl);
- AssertEquals('Name','A',Decl.Name);
- AssertEquals('member count',1,Decl.ClassDef.ElementCount);
- AssertEquals('Member name','B',Decl.ClassDef.Elements[0].Name);
- E:=TJSClassConstDeclaration(CheckClass('Member class',TJSClassConstDeclaration,Decl.ClassDef.Elements[0]));
- AssertNotNull(E);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceIndexSignature;
- Var
- Decl : TJSInterfaceDeclaration;
- SigDecl : TJSIndexSignatureDeclaration;
- begin
- StartTS('interface TDictionary { [a : string] : string; } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','TDictionary',Decl.Name);
- AssertEquals('One var',1,Decl.ElementCount);
- SigDecl:=TJSIndexSignatureDeclaration(CheckClass('Index signature',TJSIndexSignatureDeclaration,Decl.Elements[0]));
- AssertEquals('No name','',SigDecl.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceFixedStringProperty;
- Var
- Decl : TJSInterfaceDeclaration;
- Prop : TJSPropertyDeclaration;
- begin
- StartTS('export interface Color { R : "red" } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','Color',Decl.Name);
- AssertEquals('One member',1,Decl.ElementCount);
- Prop:=TJSPropertyDeclaration(CheckClass('Element 0',TJSPropertyDeclaration,Decl.Elements[0]));
- AssertEquals('member name','R',Prop.Name);
- AssertEquals('member fixed value','red',Prop.FixedStringValue);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceFixedBooleanProperty;
- Var
- Decl : TJSInterfaceDeclaration;
- Prop : TJSPropertyDeclaration;
- Fix : TJSFixedValueReference;
- begin
- StartTS('export interface Color { R : false } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','Color',Decl.Name);
- AssertEquals('One member',1,Decl.ElementCount);
- Prop:=TJSPropertyDeclaration(CheckClass('Element 0',TJSPropertyDeclaration,Decl.Elements[0]));
- AssertEquals('member name','R',Prop.Name);
- Fix:=TJSFixedValueReference(CheckClass('member fixed value',TJSFixedValueReference,Prop.ElementType));
- AssertNotNull('Value literal',Fix.FixedValue);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceFixedUnionProperty;
- Var
- Decl : TJSInterfaceDeclaration;
- Prop : TJSPropertyDeclaration;
- U : TJSUnionTypeDef;
- Fix : TJSFixedValueReference;
- begin
- StartTS('export interface Color { R : false | ''string'' } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','Color',Decl.Name);
- AssertEquals('One member',1,Decl.ElementCount);
- Prop:=TJSPropertyDeclaration(CheckClass('Element 0',TJSPropertyDeclaration,Decl.Elements[0]));
- AssertEquals('member name','R',Prop.Name);
- U:=TJSUnionTypeDef(CheckClass('member fixed value',TJSUnionTypeDef,Prop.ElementType));
- AssertEquals('Member count',2,U.TypeCount);
- Fix:=TJSFixedValueReference(CheckClass('member fixed value',TJSFixedValueReference,U.Types[0]));
- AssertNotNull('Value literal',Fix.FixedValue);
- Fix:=TJSFixedValueReference(CheckClass('member fixed value',TJSFixedValueReference,U.Types[1]));
- AssertNotNull('Value literal',Fix.FixedValue);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceDestructuredFunctionProperty;
- begin
- StartTs('interface I18nComponentProps {'#10+
- ' children: ({ i18n, i18nHash }: { i18n: I18n, i18nHash?: string }) => ReactNode;'#10+
- '}');
- AssertNotNull(GetFirstStatement);
- end;
- procedure TTestTypeScriptParser.TestDeclareExportInterfaceDestructuredFunctionProperty;
- begin
- StartTs('export interface I18nComponentProps {'#10+
- ' children: ({ i18n, i18nHash }: { i18n: I18n, i18nHash?: string }) => ReactNode;'#10+
- '}');
- AssertNotNull(GetFirstStatement);
- end;
- procedure TTestTypeScriptParser.TestDeclareInterfaceNoSemicolon;
- begin
- StartTs(' interface Conversions {'#10+
- ' ansi: (ansi: number) => string'#10+
- ' rgb: (r: number, g: number, b: number) => string'#10+
- '}');
- AssertNotNull(GetFirstStatement);
- end;
- procedure TTestTypeScriptParser.TestDeclareConstructorSignature;
- Var
- Decl : TJSInterfaceDeclaration;
- meth : TJSMethodDeclaration;
- begin
- StartTS('export interface Color { new (r: number, g:number, b : number) : Color; } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','Color',Decl.Name);
- AssertEquals('One member',1,Decl.ElementCount);
- Meth:=TJSMethodDeclaration(CheckClass('Element 0',TJSMethodDeclaration,Decl.Elements[0]));
- AssertEquals('member name','new',Meth.Name);
- end;
- procedure TTestTypeScriptParser.TestDeclareFunctionDestructuredParam;
- begin
- StartTS('declare function A({b,c,d} : E): F;');
- GetStatements;
- end;
- procedure TTestTypeScriptParser.TestDeclareFunctionIs;
- begin
- StartTS('declare function hasOwnProperty(target: A): target is B ;');
- GetStatements;
- end;
- procedure TTestTypeScriptParser.TestDeclareFunctionThisParam;
- begin
- StartTS('declare function hasOwnProperty(this: A): B ;');
- GetStatements;
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeGenericConstraint;
- Var
- Decl : TJSTypeDeclaration;
- begin
- StartTs('type ValueMap<T extends BaseType, Datum> = { [key: string]: number | string | boolean | null | ValueFn<T, Datum, number | string | boolean | null> };');
- Decl:=GetFirstType;
- AssertNotNull(Decl);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeTypeImport;
- Var
- Decl : TJSImportTypeRef;
- begin
- StartTS(' type AppChannel = import(''main'').AppChannel;');
- Decl:=TJSImportTypeRef(CheckClass('First',TJSImportTypeRef,GetFirstType.TypeDef));
- AssertEquals('Name','AppChannel',Decl.Name);
- AssertEquals('File','main',Decl.fileName);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeTypeOfImport;
- Var
- Decl : TJSImportTypeRef;
- begin
- StartTS(' type AppChannel = typeof import(''main'').AppChannel;');
- Decl:=TJSImportTypeRef(CheckClass('First',TJSImportTypeRef,GetFirstType.TypeDef));
- AssertEquals('Name','AppChannel',Decl.Name);
- AssertEquals('File','main',Decl.fileName);
- AssertEquals('File',True,Decl.IsTypeOf);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeTypeOfDefault;
- Var
- Decl : TJSImportTypeRef;
- begin
- StartTS(' type AppChannel = typeof import(''main'').default;');
- Decl:=TJSImportTypeRef(CheckClass('First',TJSImportTypeRef,GetFirstType.TypeDef));
- AssertEquals('Name','default',Decl.Name);
- AssertEquals('File','main',Decl.fileName);
- AssertEquals('File',True,Decl.IsTypeOf);
- end;
- procedure TTestTypeScriptParser.TestDeclareTypeReadonly;
- Var
- Decl : TJSFunctionStatement;
- Def : TJSFuncDef;
- R : TJSTypeReference;
- begin
- StartTS('declare function markdownTable(table: readonly string): string;');
- Decl:=GetFirstFunction;
- AssertNotNull('Have decl',Decl.AFunction);
- Def:=Decl.AFunction;
- AssertEquals('Params',1,Def.TypedParams.Count);
- R:=TJSTypeReference(CheckClass('Arg type',TJSTypeReference,Def.TypedParams.Types[0]));
- AssertTrue('Read only',R.IsReadonly);
- end;
- procedure TTestTypeScriptParser.TestDeclareArgTypeInferred;
- Var
- Decl : TJSTypeDeclaration;
- begin
- StartTS('type A = (args: infer B) => C;');
- Decl:=GetFirstType;
- AssertNotNull(Decl);
- end;
- procedure TTestTypeScriptParser.TestExportNamespacedClass;
- Var
- NS : TJSNamespaceDeclaration;
- Exp : TJSExportStatement;
- begin
- StartTS('export namespace Collection {'#10+
- ' type EventType = string;'#10+
- ' class Event extends events.Event {'#10+
- ' constructor(type: EventType, opt_element?: any);'#10+
- ' element: any;'#10+
- ' }'#10+
- '}');
- Exp:=TJSExportStatement(CheckClass('Export',TJSExportStatement,GetFirstStatement));
- NS:=TJSNamespaceDeclaration(CheckClass('Namespace', TJSNamespaceDeclaration, Exp.Declaration));
- AssertEquals('NS name','Collection',NS.Name);
- end;
- procedure TTestTypeScriptParser.TestExportClassConstructor;
- Var
- Decl : TJSClassDeclaration;
- begin
- StartTS('export class JQuery { constructor (); };');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertNotNull('Members',Decl.Members);
- AssertEquals('members count',1,Decl.Members.Functions.Count);
- AssertFalse('Abstract',Decl.IsAbstract);
- end;
- procedure TTestTypeScriptParser.TestExportAbstractClass;
- Var
- Decl : TJSAmbientClassDeclaration;
- begin
- StartTS('export abstract class JQuery {};');
- Decl:=TJSAmbientClassDeclaration(CheckClass('Class',TJSAmbientClassDeclaration,GetFirstClass(True)));
- AssertNotNull('Have declaration');
- AssertEquals('Name','JQuery',Decl.Name);
- AssertNull('Extends',Decl.Extends);
- AssertNull('Members',Decl.Members);
- AssertTrue('Abstract',Decl.IsAbstract);
- end;
- procedure TTestTypeScriptParser.TestExportInterface;
- Var
- Decl : TJSInterfaceDeclaration;
- begin
- StartTS('export interface Color { R,G,B : string; } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','Color',Decl.Name);
- end;
- procedure TTestTypeScriptParser.TestExportInterfaceDefault;
- Var
- Decl : TJSInterfaceDeclaration;
- begin
- StartTS('export default interface Color { R,G,B : string; } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','Color',Decl.Name);
- end;
- procedure TTestTypeScriptParser.TestExportInterfaceIndexSignature;
- Var
- Decl : TJSInterfaceDeclaration;
- SigDecl : TJSIndexSignatureDeclaration;
- begin
- StartTS('export interface Color { level : string; [key : string] : any; } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','Color',Decl.Name);
- AssertEquals('One var',2,Decl.ElementCount);
- SigDecl:=TJSIndexSignatureDeclaration(CheckClass('Index signature',TJSIndexSignatureDeclaration,Decl.Elements[1]));
- AssertEquals('No name','',SigDecl.Name);
- end;
- procedure TTestTypeScriptParser.TestExportInterfaceIndexSignatureOptional;
- Var
- Decl : TJSInterfaceDeclaration;
- SigDecl : TJSIndexSignatureDeclaration;
- begin
- StartTS('export interface Color { [key : string] ? : any; } ;');
- Decl:=TJSInterfaceDeclaration(CheckClass('Interface',TJSInterfaceDeclaration,GetFirstInterface));
- AssertEquals('Interface name','Color',Decl.Name);
- AssertEquals('One var',1,Decl.ElementCount);
- SigDecl:=TJSIndexSignatureDeclaration(CheckClass('Index signature',TJSIndexSignatureDeclaration,Decl.Elements[0]));
- AssertEquals('No name','',SigDecl.Name);
- end;
- procedure TTestTypeScriptParser.TestExportImportStatement;
- Var
- expDecl : TJSExportStatement;
- Decl : TJSImportStatement;
- Call : TJSCallExpression;
- begin
- StartTS('export import LocaleConfig = require("locale");');
- ExpDecl:=TJSExportStatement(CheckClass('import',TJSExportStatement,GetFirstStatement));
- Decl:=TJSImportStatement(CheckClass('import',TJSImportStatement,expDecl.Declaration));
- Call:=TJSCallExpression(CheckClass('Have import assign', TJSCallExpression, Decl.Expression));
- AssertNotNull('Have call expression',Call.Expr);
- CheckClass('Call function name',TJSPrimaryExpressionIdent,Call.Expr);
- AssertEquals('call function','require',TJSPrimaryExpressionIdent(Call.Expr).Name);
- end;
- procedure TTestTypeScriptParser.TestExportAssignStatement;
- var
- Decl: TJSExportStatement;
- begin
- StartTS('export = LocaleConfig;');
- Decl:=TJSExportStatement(CheckClass('export',TJSExportStatement,GetFirstStatement));
- AssertNotNull('Have assignment',Decl.Declaration);
- end;
- procedure TTestTypeScriptParser.TestExportAsNamespace;
- var
- Decl: TJSExportStatement;
- begin
- StartTS('export as namespace B;');
- Decl:=TJSExportStatement(CheckClass('export',TJSExportStatement,GetFirstStatement));
- AssertEquals('Namespace export','B',Decl.NameSpaceExport);
- end;
- procedure TTestTypeScriptParser.TestExportNamespaceClass;
- var
- Decl: TJSNamespaceDeclaration;
- begin
- StartTS('declare namespace g { export class Grid { collection(name?: string): mongo.Collection; } };');
- Decl:=TJSNamespaceDeclaration(CheckClass('export',TJSNamespaceDeclaration,GetFirstNameSpace));
- AssertNotNull('Have namespace',Decl);
- end;
- procedure TTestTypeScriptParser.TestExportFunction;
- Var
- Exp : TJSExportStatement;
- begin
- StartTs('export function clone(stylesheet: CSSStyleSheet): CSSStyleSheet;'#10+
- 'export function parse(token: string): CSSStyleSheet;');
- AssertEquals('Statement count',2,GetStatements.Count);
- Exp:=TJSExportStatement(CheckClass('export',TJSExportStatement,GetFirstStatement));
- AssertNotNull('Have statement',Exp);
- end;
- procedure TTestTypeScriptParser.TestExportDefaultFunction;
- Var
- Exp : TJSExportStatement;
- begin
- StartTs('export default function (stylesheet: CSSStyleSheet): CSSStyleSheet;');
- AssertEquals('Statement count',1,GetStatements.Count);
- Exp:=TJSExportStatement(CheckClass('export',TJSExportStatement,GetFirstStatement));
- AssertNotNull('Have statement',Exp);
- end;
- procedure TTestTypeScriptParser.TestExportTypeArrowFunctionArgsComma;
- Var
- S : TJSExportStatement;
- begin
- StartTS('export type ConnectionRequestCb = ('#10+
- ' info: ConnectionRequestInfo,'#10+
- ' accept: ConnectionRequestAcceptFn,'#10+
- ' reject: ConnectionRequestRejectFn,'#10+
- ' ) => void;');
- S:=TJSExportStatement(CheckClass('First statement',TJSExportStatement,GetFirstStatement));
- CheckClass('Decl',TJSTypeDeclaration,S.Declaration);
- end;
- procedure TTestTypeScriptParser.TestExportEnum;
- Var
- S : TJSExportStatement;
- E : TJSEnumDeclaration;
- ET : TJSEnumTypeDef;
- begin
- StartTS('export enum Colors {red,blue,green};');
- S:=TJSExportStatement(CheckClass('First statement',TJSExportStatement,GetFirstStatement));
- E:=TJSEnumDeclaration(CheckClass('Decl',TJSEnumDeclaration,S.Declaration));
- AssertEquals('Name','Colors',E.Name);
- ET:=TJSEnumTypeDef(CheckClass(E.EnumDef,TJSEnumTypeDef,'Have enum definition'));
- AssertEquals('Member count',3,ET.NameCount);
- AssertEquals('Member 0','red',ET.Names[0]);
- AssertEquals('Member 1','blue',ET.Names[1]);
- AssertEquals('Member 2','green',ET.Names[2]);
- end;
- procedure TTestTypeScriptParser.TestExportObjectUnion;
- begin
- StartTs('export type VisitorIdentifier = { id: string } | { user_id: string };'#10+
- 'export interface Visitor {'#10+
- ' type: "visitor"; '#10+
- '}');
- AssertNotNull(GetStatements);
- end;
- procedure TTestTypeScriptParser.TestExportNoSemicolon;
- begin
- StartTs('export function intlReducer(state: IntlState | undefined, action: IntlAction): IntlState'#10+
- 'export function updateIntl (opts: IntlState): IntlAction');
- AssertNotNull(GetStatements);
- end;
- procedure TTestTypeScriptParser.TestExportAsKeyWord;
- begin
- StartTs('export { del as delete };');
- AssertNotNull(GetStatements);
- end;
- procedure TTestTypeScriptParser.TestNamespaceInterfaceFunction;
- Var
- NS : TJSNameSpaceStatement;
- begin
- StartTs('declare namespace Rox {'#10+
- ' interface RoxContainer {'#10+
- ' [key: string]: Flag | RoxNumber | RoxString;'#10+
- ' }'#10+
- ' function register(namespace: string, roxContainer: RoxContainer): void;'#10+
- ' function register(roxContainer: RoxContainer): void;'#10+
- '}');
- NS:=TJSNameSpaceStatement(CheckClass('NS',TJSNameSpaceStatement,GetFirstStatement));
- AssertNotNull(NS);
- end;
- initialization
- RegisterTest(TTestTypeScriptParser);
- end.
|