diff --git a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java index a9c2d2bd05b634f028e7b3cda722e61d1317d370..d4e68a2f78e32d959b9cb5ffd0829c4018038bdb 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java +++ b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java @@ -351,7 +351,6 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple } } else if (ctx.singleExpression() != null) { setVariableSingleExpression(ctx, varName); - } System.out.println("------------------------------"); } @@ -413,37 +412,6 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple // 提取构造函数参数列表 String res = ctx.formalParameterList().getText(); System.out.println("Construct: " + res); - TypeScriptParser.FormalParameterListContext fplc = ctx.formalParameterList(); - if (fplc == null || !(this.currentObject instanceof ClassObj co)) { - return; - } - - int cnt = fplc.getChildCount(); - FuncObj fo = new FuncObj(); - fo.setName("constructor"); - fo.setRetValue("void"); - co.addFunc(fo); - for (int i = 0; i < cnt; i++) { - ParseTree pt = fplc.getChild(i); - if (!(pt instanceof TypeScriptParser.FormalParameterArgContext fpac)) { - continue; - } - - String type = ""; - if (fpac.typeAnnotation() != null && fpac.typeAnnotation().stop != null) { - type = fpac.typeAnnotation().stop.getText(); - } - - String name = ""; - if (fpac.assignable() != null) { - name = fpac.assignable().getText(); - } - - if (type.isEmpty()) { - type = name; - } - fo.addParam(name, type); - } } @@ -469,6 +437,14 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple FuncObj fo = new FuncObj(); fo.setName(funcName); fo.setRetValue(typeAnno); + if (ctx.callSignature().typeParameters() != null) { + TypeScriptParser.TypeParametersContext tpc = ctx.callSignature().typeParameters(); + List tpcl = tpc.typeParameterList().typeParameter(); + for (TypeScriptParser.TypeParameterContext tpcItem : tpcl) { + fo.addTemplate(tpcItem.identifier().getText()); + } + + } if (ctx.callSignature().parameterList() != null) { setFuncParam(ctx, fo); } @@ -497,6 +473,46 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple // 处理继承关系(extends/implements) TypeScriptParser.ClassHeritageContext heritage = ctx.classHeritage(); System.out.println("Class heritage: " + heritage.getText()); + if (heritage.classExtendsClause() != null) { + String type = heritage.classExtendsClause().Extends().getText(); + String name = heritage.classExtendsClause().typeReference().typeName().getText(); + + TypeScriptParser.TypeGenericContext tgc = heritage.classExtendsClause().typeReference().typeGeneric(); + if (tgc != null) { + TypeScriptParser.TypeArgumentListContext talc = tgc.typeArgumentList(); + List tacl = talc.typeArgument(); + for (TypeScriptParser.TypeArgumentContext tac : tacl) { + co.addHeritageTemplate(tac.type_().getText()); + } + } else { + co.addHeritage(type, name); + } + + } else if (heritage.implementsClause() != null) { + TypeScriptParser.ClassOrInterfaceTypeListContext citl = + heritage.implementsClause().classOrInterfaceTypeList(); + TypeScriptParser.TypeReferenceContext trc = citl.typeReference(0); + if (trc != null && trc.typeGeneric() != null) { + TypeScriptParser.TypeArgumentListContext talc = trc.typeGeneric().typeArgumentList(); + List tacl = talc.typeArgument(); + for (TypeScriptParser.TypeArgumentContext tac : tacl) { + co.addHeritageTemplate(tac.type_().getText()); + } + } + + String name = trc.typeName().getText(); + String type = heritage.implementsClause().Implements().getText(); + co.addHeritage(type, name); + } + + // 处理模板 + if (ctx.typeParameters() != null && ctx.typeParameters().typeParameterList() != null) { + TypeScriptParser.TypeParameterListContext tpl = ctx.typeParameters().typeParameterList(); + List tpcl = tpl.typeParameter(); + for (TypeScriptParser.TypeParameterContext tpc : tpcl) { + co.addTemplate(tpc.getText()); + } + } } @Override @@ -585,6 +601,36 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple System.out.println("Class property: " + pmdc.getText()); setFuncAccessor(gsdec); } + + TypeScriptParser.ConstructorDeclarationContext cdc = ctx.constructorDeclaration(); + if (cdc != null && cdc.formalParameterList() != null && currentObject instanceof ClassObj co) { + if (cdc.formalParameterList().lastFormalParameterArg() != null) { + FuncObj fo = new FuncObj(); + String name = cdc.Constructor().getText(); + fo.setName(name); + co.addFunc(fo); + String pType = TsToken.TS_TOKEN_VOID; + String pName = cdc.formalParameterList().lastFormalParameterArg().identifier().getText(); + String de = !cdc.formalParameterList().lastFormalParameterArg().Ellipsis().getText().isEmpty() ? + TsToken.TS_TOKEN_REST_PARAM : ""; + fo.addParam(pName, pType, de); + } else if (cdc.formalParameterList().formalParameterArg() != null) { + List fpacl = cdc.formalParameterList().formalParameterArg(); + FuncObj fo = new FuncObj(); + String name = cdc.Constructor().getText(); + fo.setName(name); + co.addFunc(fo); + for (TypeScriptParser.FormalParameterArgContext fpac : fpacl) { + + String pType = fpac.typeAnnotation() != null ? fpac.typeAnnotation().type_().getText() : "void"; + String pName = fpac.singleExpression() != null ? + fpac.singleExpression().getText() : fpac.assignable().getText(); + fo.addParam(pName, pType); + + } + } + } + } @Override @@ -592,18 +638,13 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple super.enterMethodDeclarationExpression(ctx); System.out.println("Method property: " + ctx.getText()); String propertyName = ctx.propertyName().getText(); - System.out.println("Method name: " + propertyName); String callSign = ctx.callSignature().getText(); - System.out.println("Method callSign: " + callSign); String typeAnno = ""; TypeScriptParser.TypeAnnotationContext tac = ctx.callSignature().typeAnnotation(); if (tac != null && tac.type_() != null) { typeAnno = tac.type_().getText(); } - System.out.println("Method typeAnno: " + typeAnno); - TypeScriptParser.ParameterListContext plc = ctx.callSignature().parameterList(); - FuncObj fo = new FuncObj(); fo.setRetValue(typeAnno); fo.setName(propertyName); @@ -615,10 +656,14 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple fo.setAccessor(ctx.propertyMemberBase().accessibilityModifier().getText()); } + if (ctx.propertyMemberBase() != null && ctx.propertyMemberBase().Static() != null) { + fo.setQualifier(ctx.propertyMemberBase().Static().getText()); + } + + TypeScriptParser.ParameterListContext plc = ctx.callSignature().parameterList(); if (plc != null) { List plcList = ctx.callSignature().parameterList().parameter(); for (TypeScriptParser.ParameterContext pc : plcList) { - System.out.println("Method param: " + pc.getText()); TypeScriptParser. RequiredParameterContext rpc = pc.requiredParameter(); String ta = ""; if (rpc.typeAnnotation() != null && rpc.typeAnnotation().type_() != null) { @@ -676,11 +721,15 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple System.out.println("Property property: " + ctx.getText()); String propertyName = ctx.propertyName().getText(); - String typeName = ctx.typeAnnotation().stop.getText(); + String typeName = ctx.typeAnnotation() != null ? ctx.typeAnnotation().type_().getText() : "void"; String qualifier = ctx.start.getText(); System.out.println("Property name: " + propertyName + " type: " + typeName); if (this.currentObject instanceof ClassObj co) { - co.addParam(propertyName, typeName, qualifier); + if (ctx.initializer() != null && ctx.initializer().singleExpression() != null) { + co.addParam(propertyName, typeName, qualifier, ctx.initializer().singleExpression().getText()); + } else { + co.addParam(propertyName, typeName, qualifier); + } int lastIndex = this.classObjList.size() - 1; this.classObjList.set(lastIndex, co); @@ -779,8 +828,17 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple public void enterClassHeritage(TypeScriptParser.ClassHeritageContext ctx) { super.enterClassHeritage(ctx); System.out.println("enterClassHeritage: " + ctx.getText()); - if (this.currentObject instanceof ClassObj co) { - co.addHeritage(ctx.start.getText(), ctx.stop.getText()); + if (currentObject instanceof ClassObj co && ctx.classExtendsClause() != null) { + if (!co.getHeritageNameList().isEmpty()) { + return; + } + String ext = ctx.classExtendsClause().Extends() != null ? + ctx.classExtendsClause().Extends().getText() : ""; + String typeName = ctx.classExtendsClause().typeReference() != null ? + ctx.classExtendsClause().typeReference().getText() : ""; + if (co.getHeritageTemplateList().isEmpty()) { + co.addHeritage(ext, typeName); + } } } @@ -961,44 +1019,75 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener imple for (TypeScriptParser.FormalParameterArgContext fpac : fpacl) { String name = fpac.assignable().getText(); - String type = fpac.typeAnnotation().type_().getText(); + String type = fpac.typeAnnotation() != null ? + fpac.typeAnnotation().type_().getText() : TsToken.TS_TOKEN_VOID; fo.addParam(name, type); System.out.println("addparam: " + fo.toJsonString()); } } } + private FuncObj createFuncObj(String varName) { + FuncObj fo = new FuncObj(); + fo.setAlias(varName); + this.currentObject = fo; + this.funcObjList.add(fo); + return fo; + } + private void setVariableSingleExpression(TypeScriptParser.VariableDeclarationContext ctx, String varName) { List sel = ctx.singleExpression(); for (TypeScriptParser.SingleExpressionContext sec : sel) { String varType = sec.start.getText(); if (varType.equals(TsToken.TS_TOKEN_FUNCTION)) { this.currentIdentifier = varName; - FuncObj fo = new FuncObj(); - fo.setAlias(varName); - this.currentObject = fo; - this.funcObjList.add(fo); + createFuncObj(varName); break; } else if ((sec instanceof TypeScriptParser.FunctionExpressionContext fec) && fec.anonymousFunction() != null) { TypeScriptParser.AnonymousFunctionContext afc = fec.anonymousFunction(); TypeScriptParser.ArrowFunctionDeclarationContext afdc = afc.arrowFunctionDeclaration(); - FuncObj fo = new FuncObj(); - fo.setAlias(varName); - this.currentObject = fo; - this.funcObjList.add(fo); + FuncObj fo = createFuncObj(varName); setFuncExpressionParam(afdc, fo); } else if (sec instanceof TypeScriptParser.ParenthesizedExpressionContext pec) { - FuncObj fo = new FuncObj(); - fo.setAlias(varName); - this.currentObject = fo; - this.funcObjList.add(fo); + FuncObj fo = createFuncObj(varName); List secl = pec.expressionSequence().singleExpression(); for (TypeScriptParser.SingleExpressionContext secItem : secl) { String name = secItem.getText(); fo.addParam(name, ""); } + } else if (sec instanceof TypeScriptParser.IdentifierExpressionContext iec) { + TypeScriptParser.SingleExpressionContext secItem = iec.singleExpression(); + if (secItem == null) { + continue; + } + + FuncObj fo = createFuncObj(varName); + fo.setName(varType); + + if (!(secItem instanceof TypeScriptParser.GenericTypesContext gtc)) { + continue; + } + + String temp = gtc.typeArguments().getText(); + fo.addTemplate(temp); + + TypeScriptParser.ExpressionSequenceContext esc = gtc.expressionSequence(); + List secl = esc.singleExpression(); + setFuncParamStr(fo, secl); + + } + } + } + + private void setFuncParamStr(FuncObj fo, List secl) { + for (TypeScriptParser.SingleExpressionContext secObj : secl) { + if (secObj instanceof TypeScriptParser.ParenthesizedExpressionContext pec) { + ParamObj po = new ParamObj(); + TypeScriptParser.ExpressionSequenceContext testObj = pec.expressionSequence(); + po.setStrValue(testObj.singleExpression(0).getText()); + fo.addParam(po); } } } diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java index eccfcfcec8105da01ce48055a5d56e2e34e4ea01..5b59d8953bdce2a72581513c36a355732bb9b119 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java @@ -36,6 +36,8 @@ public class ClassObj extends GBaseObject { private List funcList; private List heritageTypeList; private List heritageNameList; + private List heritageTemplateList; + private List tempList; /** * 构造函数 @@ -45,8 +47,10 @@ public class ClassObj extends GBaseObject { this.paramList = new CopyOnWriteArrayList<>(); this.funcList = new CopyOnWriteArrayList<>(); + this.tempList = new CopyOnWriteArrayList<>(); this.heritageTypeList = new CopyOnWriteArrayList<>(); this.heritageNameList = new CopyOnWriteArrayList<>(); + this.heritageTemplateList = new CopyOnWriteArrayList<>(); } /** @@ -164,6 +168,26 @@ public class ClassObj extends GBaseObject { return heritageTypeList; } + /** + * 获取继承模板类型 + * + * @return 模板类型 + */ + public List getHeritageTemplateList() { + return heritageTemplateList; + } + + /** + * 设置继承模板类型 + * + * @param heritageTemplateList 模板类型 + */ + public void setHeritageTemplateList(List heritageTemplateList) { + this.heritageTemplateList = heritageTemplateList; + } + + + /** * 读取方法 * @@ -173,6 +197,24 @@ public class ClassObj extends GBaseObject { return paramList; } + /** + * 设置模板类型 + * + * @param tempList 模板类型 + */ + public void setTempList(List tempList) { + this.tempList = tempList; + } + + /** + * 获取模板列表 + * + * @return 模板列表 + */ + public List getTempList() { + return tempList; + } + /** * 增加param * @@ -210,6 +252,23 @@ public class ClassObj extends GBaseObject { this.paramList.add(po); } + /** + * 增加param + * + * @param name 名字 + * @param type 类型 + * @param qualifier 声明 + * @param initial 初始化值 + */ + public void addParam(String name, String type, String qualifier, String initial) { + ParamObj po = new ParamObj(); + po.setType(type); + po.setName(name); + po.setQualifier(qualifier); + po.setStrValue(initial); + this.paramList.add(po); + } + /** * 增加方法 * @@ -243,4 +302,22 @@ public class ClassObj extends GBaseObject { heritageNameList.add(name); heritageTypeList.add(type); } + + /** + * 增加模板类型 + * + * @param tmp 模板类型 + */ + public void addTemplate(String tmp) { + tempList.add(tmp); + } + + /** + * 增加继承模板类 + * + * @param ht 继承模板类 + */ + public void addHeritageTemplate(String ht) { + heritageTemplateList.add(ht); + } } diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java index 3df6dc52df82b2961d36ddabd5a484cdf32b3682..4dff29599eb9f6c6148ccb3a7de9cafc981e9730 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java @@ -60,6 +60,16 @@ public class FuncObj extends GBaseObject { */ private List paramList; + /** + * 限定 + */ + private String qualifier; + + /** + * 模板类型列表 + */ + private List tempList; + /** * 构造函数 */ @@ -69,6 +79,7 @@ public class FuncObj extends GBaseObject { this.type = ""; this.retValue = TsToken.TS_TOKEN_VOID; this.paramList = new CopyOnWriteArrayList<>(); + this.tempList = new CopyOnWriteArrayList<>(); } /** @@ -106,6 +117,61 @@ public class FuncObj extends GBaseObject { return type; } + /** + * 获取模板类 + * + * @return 模板类列表 + */ + public List getTempList() { + return tempList; + } + + /** + * 设置模板类 + * + * @param tempList 模板类列表 + */ + public void setTempList(List tempList) { + this.tempList = tempList; + } + + /** + * 获取模板类 + * + * @param i 游标 + * @return 模板类 + */ + public String getTemplate(int i) { + return this.tempList.get(i); + } + + /** + * 增加模板 + * + * @param temp 模板 + */ + public void addTemplate(String temp) { + this.tempList.add(temp); + } + + /** + * 设置限定 + * + * @param qualifier 限定 + */ + public void setQualifier(String qualifier) { + this.qualifier = qualifier; + } + + /** + * 获取限定 + * + * @return 限定 + */ + public String getQualifier() { + return qualifier; + } + /** * 设置alias * diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/ParamObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/ParamObj.java index 2a07a5392c0f3965badd0281bc456b3f526785a9..2f16d2c2333b5a683086768906b8471a3fc313e9 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/ParamObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/ParamObj.java @@ -17,6 +17,9 @@ package grammar; import utils.TsToken; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + /** *

类名:该类用于xxx

* description param grammar @@ -57,11 +60,17 @@ public class ParamObj extends GBaseObject { */ private int[] asList; + /** + * 参数值 + */ + private List vList; + /** * 构造函数 */ public ParamObj() { this.decorator = TsToken.TS_TOKEN_REQUIRED; + vList = new CopyOnWriteArrayList<>(); } /** @@ -170,6 +179,53 @@ public class ParamObj extends GBaseObject { return asList; } + /** + * 获取值数组 + * + * @return 值数组 + */ + public List getvList() { + return vList; + } + + /** + * 设置值数据 + * + * @param vList 值数据 + */ + public void setvList(List vList) { + this.vList = vList; + } + + /** + * 设置值 + * + * @param value 初始化值 + */ + public void setStrValue(String value) { + this.vList.add(value); + } + + /** + * 获取类参数值 + * + * @param i 下标 + * @return 返回参数值 + */ + public String getStrValue(int i) { + return vList.get(i); + } + + /** + * 获取类参数值 + * + * @param i 下标 + * @return 返回参数值 + */ + public int getIntValue(int i) { + return asList[i]; + } + /** * 设置数组下标 * diff --git a/src/intellij_plugin/ohosgen/src/test/java/parse/ParseTsTest.java b/src/intellij_plugin/ohosgen/src/test/java/parse/ParseTsTest.java index a7289daad4826debd914e481fcbe374cc038132d..8341475d0011314a8ae16332d7cea2951b9fb85f 100644 --- a/src/intellij_plugin/ohosgen/src/test/java/parse/ParseTsTest.java +++ b/src/intellij_plugin/ohosgen/src/test/java/parse/ParseTsTest.java @@ -36,141 +36,67 @@ import static org.junit.jupiter.api.Assertions.*; */ class ParseTsTest { - String testClass2 = "abstract class Person {\n" + - " name: string;\n" + - "\n" + - " constructor(name: string) {\n" + - " this.name = name;\n" + - " }\n" + - "\n" + - " abstract find(target: string): Person;\n" + - " abstract nameAbs: string;\n" + - "}"; + String testInterface1 = "export interface CallbackTest {\n" + + "\t(msg: string): void;\n" + + "};"; - String testClass3 = "abstract class Person {\n" + + String testInterface2 = "interface IPerson {\n" + " name: string;\n" + - " value: int;\n" + - "\n" + - " constructor(name: string, value: int) {\n" + - " this.name = name;\n" + - " this.value = value;\n" + - " }\n" + - "\n" + - " abstract find(target: string, cnt: int): Person;\n" + - " abstract add(int, string): Person;\n" + - " abstract nameAbs: string;\n" + "}"; - String testClass4 = "abstract class Person {\n" + - " name: string;\n" + - " value: int;\n" + - "\n" + - " constructor(string, int) {\n" + - " this.name = name;\n" + - " this.value = value;\n" + - " }\n" + - "\n" + - " abstract find(string): Person;\n" + - " abstract add(int, string): Person;\n" + - " abstract nameAbs: string;\n" + + String testInterface3 = "interface IKeyValueProcessor\n" + + "{\n" + + " process(key: T, val: U): void;\n" + + "};"; + + String testInterface4 = "interface IProcessor\n" + + "{\n" + + " result:T;\n" + + " process(a: T, b: T) => T;\n" + "}"; - String testClass5 = "class Employee extends Person {\n" + - " empCode: number;\n" + - "\n" + - " constructor(name: string, code: number) {\n" + - " super(name); // must call super()\n" + - " this.empCode = code;\n" + - " }\n" + - "\n" + - " find(name:string): Person {\n" + - " // execute AJAX request to find an employee from a db\n" + - " return new Employee(name, 1);\n" + - " }\n" + + String testInterface5 = "interface KeyPair {\n" + + " key: T;\n" + + " value: U;\n" + "}"; - String testInterface1 = "export interface CallbackTest {\n" + - "\t(msg: string): void;\n" + + String testInterface6 = "interface KeyValueProcessor\n" + + "{\n" + + " (key: T, val: U): void;\n" + "};"; - String testInterface2 = "interface IPerson {\n" + + String testInterface7 = "export interface IPerson {\n" + " name: string;\n" + + " gender: string;\n" + "}"; - String testClass6 = "interface IPerson {\n" + - " name: string;\n" + - "}\n" + - "\n" + - "class Person implements IPerson {\n" + - " public publicString: string;\n" + - " private privateString: string;\n" + - " protected protectedString: string;\n" + - " readonly readonlyString: string;\n" + - " name: string;\n" + - "\n" + - " constructor(name: string) {\n" + - " this.name = name;\n" + - " }\n" + - "}"; - - String testClass7 = "interface IPerson {\n" + - " name: string;\n" + - "}\n" + - "\n" + - "class Person implements IPerson {\n" + - " public publicString: string;\n" + - " private privateString: string;\n" + - " protected protectedString: string;\n" + - " readonly readonlyString: string;\n" + - " name: string;\n" + - "\n" + - " constructor(name: string) {\n" + - " this.name = name;\n" + - " }\n" + - "}\n" + - "\n" + - "class Employee extends Person {\n" + + String testInterface8 = "interface IEmployee extends IPerson{\n" + " empCode: number;\n" + - " currentUser: any;\n" + - " static pi: number = 3.14;\n" + - "\n" + - " constructor(empcode: number, name:string) {\n" + - " super(name);\n" + - " this.empCode = empcode;\n" + - " }\n" + - "\n" + - " get user() {\n" + - " return this.currentUser;\n" + - " }\n" + - "\n" + - " set user(usr: any) {\n" + - " this.currentUser = usr;\n" + - " }\n" + - "\n" + - " displayName():void {\n" + - " console.log(\"Name = \" + this.name + \", Employee Code = \" + this.empCode);\n" + - " }\n" + + " readonly empName: string;\n" + + " empDept?:string;\n" + + " getSalary: (number) => number; // arrow function\n" + + " getManagerName(number): string;\n" + "}"; - String testClass8 = "export class myClass {\n" + - " public async foo( ): Promise {\n" + - " }\n" + + String testInterface9 = "declare interface IRouteInfo {\n" + + " path: string;\n" + + " title: string;\n" + + " icon: string;\n" + + " class: string;\n" + + " allowAnonymous: boolean;\n" + "}"; - String testClass9 = "export class NotController {\n" + - " @Post()\n" + - " notControllerPost(body) {\n" + - " return 'This is not an api method';\n" + - " }\n" + + String testInterface10 = "interface KeyPair {\n" + + " key: number;\n" + + " value: string;\n" + + "}\n"; + + String testInterface11 = "interface NumList {\n" + + " [index:string]:string\n" + "}"; - String testClass10 = "export default class CustomerModel {\n" + - " constructor(data) {\n" + - " this.cardAccountId = data.cardAccountId;\n" + - " this.accountHolderId = data.accountHolderId;\n" + - " this.firstName = data.firstName;\n" + - " this.lastName = data.lastName;\n" + - " }\n" + + String testInterface12 = "interface IStringList {\n" + + " [index:string]:string\n" + "}"; String testFunc2 = "namespace StringUtility\n" + @@ -256,6 +182,131 @@ class ParseTsTest { String testFunc18 = "var myFunction = function(arg1: string, arg2: number,) {};"; + String testFunc19 = "function getArray(items : T[] ) : T[] {\n" + + " return new Array().concat();\n" + + "}"; + + String testFunc20 = "let myNumArr = getArray([100, 200, 300]);"; + + String testFunc21 = "let myStrArr = getArray([\"Hello\", \"World\"]);"; + + String testFunc22 = "function displayType(id:T, name:U): void {\n" + + " console.log(typeof(id) + \", \" + typeof(name));\n" + + "}"; + + String testFunc23 = "function displayTypeNon(id:T, name:string): void {\n" + + " console.log(typeof(id) + \", \" + typeof(name));\n" + + "}"; + + String testFunc24 = "function displayNames(names:T[]): void {\n" + + " console.log(names.join(\", \"));\n" + + "}"; + + String testFunc25 = "function display(per: T): void {\n" + + " console.log(`${ per.firstName} ${per.lastName}` );\n" + + "}"; + + String testFunc26 = "function genericWithKeyOf(list: T[], field: K): T[] {}"; + + String testFunc27 = "function genericParameterWithDefault(field: T) {}"; + + String testFunc28 = "function processNumKeyPairs(key:number, value:number):void {\n" + + " console.log('processNumKeyPairs: key = ' + key + ', value = ' + value)\n" + + "}"; + + String testFunc29 = "function processEntity(e?: Entity) {\n" + + " let s = e!.name;\n" + + " let t = e.name;\n" + + " let o = e!.obj!.i;\n" + + " let p = e?.name;\n" + + "\n" + + " let i = p!;\n" + + "}"; + + String testType2 = "// TypeAlias\n" + + "type Employee = {\n" + + " type: \"employee\" | \"manager\";\n" + + " typeId: 1 | 2;\n" + + " id: string;\n" + + " name: string;\n" + + " address?: string; // Optional\n" + + " phone?: string | null;\n" + + "}"; + + String testType3 = "type EmployeeType =\n" + + " | \"employee\"\n" + + " | \"manager\";"; + + String testType4 = "type EmployeeNameType = Employee[\"name\"];"; + + String testType5 = "type EmployeeMap = Map;"; + + String testType6 = "type EmployeeMapKey = keyof EmployeeMap;"; + + String testVariable1 = "let employeeName = \"John\";"; + + String testVariable2 = "let employeeName:string = \"John\";"; + + String testVariable3 = "var num1:number = 1;"; + + String testVariable4 = "const playerCodes = {\n" + + " player1 : 9,\n" + + " player2 : 10,\n" + + " player3 : 13,\n" + + " player4 : 20\n" + + "};\n" + + "playerCodes.player2 = 11; // OK"; + + String testVariable5 = "playerCodes = { " + + "//Compiler Error: Cannot assign to playerCodes because it is a constant or read-only\n" + + " player1 : 50, // Modified value\n" + + " player2 : 10,\n" + + " player3 : 13,\n" + + " player4 : 20\n" + + "};"; + + String testVariable6 = "playerCodesArray = { " + + "//Compiler Error: Cannot assign to playerCodes because it is a constant or read-only\n" + + " player1 : 50, // Modified value\n" + + " player2 : playerCodes[Test],\n" + + " player3 : 13,\n" + + " player4 : 20\n" + + "};"; + + String testVariable7 = "export const ROUTES: any[] = [\n" + + "{path: '/dashboard', title: 'Dashboard', icon: 'dashboard', class: '', allowAnonymous: false},\n" + + "{path: '/deals', title: 'Deals', icon: 'assignment', class: '', allowAnonymous: false},\n" + + "{path: '/pipeline', title: 'Pipeline', icon: 'timeline', class: '', allowAnonymous: false},\n" + + "{path: '/language-resolver', title: 'Language', icon: 'translate', class: '', allowAnonymous: false},\n" + + "{path: '/commit-analysis', title: 'Commit History', icon: 'tune', class: '', allowAnonymous: false},\n" + + "{path: '/login', title: 'Log In', icon: 'lock', class: '', allowAnonymous: true},\n" + + "];"; + + String testVariable8 = "export const Components = _.chain([_.values(ROUTES) as any[]])\n" + + " .flatten()\n" + + " .filter((item) => item.name && (item.name.toLowerCase().endsWith('component')))\n" + + " .value();"; + + String testVariable9 = "var fileLanguages = " + + "_.uniqBy([...this.fileLanguages, ...Components], p => p.fileId);"; + + String testVariable10 = "var languageMap = " + + "new Map(fileLanguages.map(lang => [lang.id, lang] as [string, ILanguage]));"; + + String testVariable11 = "let schema = mapEnumToSchema(Joi.boolean())"; + + String testVariable12 = "const codesByType = Joi.object()\n" + + " .keys({\n" + + " type: Joi.string().required(),\n" + + " limit: Joi.number().optional(),\n" + + " skip: Joi.number().optional(),\n" + + " })\n" + + " .required();"; + + String testVariable13 = "const post = (...args: any[]) => {\n" + + "};"; + + String testVariable14 = "const function = ([x]: any) => x;"; @Test void parseFile() { @@ -291,443 +342,6 @@ class ParseTsTest { assertEquals("\"BLUE\"", vl.get(2)); } - @Test - void parseCStreamClass_1() { - String testClass = "export class Box {\n" + - "\tlines: number;\n" + - "\tsrcType: TestEnum;\n" + - "\tdestType1: TestSt3;\n" + - "\tdesType2: TestShap_t;\n" + - "\tdesType3: TestUnion3_t;\n" + - "\tcalcArea: number;\n" + - "\theith_: number;\n" + - "\ttransform2D(calcCB: Calculate): boolean;\n" + - "\ttransform3D(ctCB: CallbackTest): boolean;\n" + - "};"; - ParseBase parser = ParseFactory.getParser("ts"); - - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseObj po = parser.parseCStream(cStream); - List eol = po.getClassList(); - assertEquals(1, eol.size()); - ClassObj co = eol.get(0); - assertEquals("Box", co.getName()); - List pl = co.getParamList(); - assertEquals(7, pl.size()); - ParamObj poItem = pl.get(0); - assertEquals("lines", poItem.getName()); - assertEquals("number", poItem.getType()); - poItem = pl.get(1); - assertEquals("srcType", poItem.getName()); - assertEquals("TestEnum", poItem.getType()); - poItem = pl.get(2); - assertEquals("destType1", poItem.getName()); - assertEquals("TestSt3", poItem.getType()); - poItem = pl.get(3); - assertEquals("desType2", poItem.getName()); - assertEquals("TestShap_t", poItem.getType()); - poItem = pl.get(4); - assertEquals("desType3", poItem.getName()); - assertEquals("TestUnion3_t", poItem.getType()); - poItem = pl.get(5); - assertEquals("calcArea", poItem.getName()); - assertEquals("number", poItem.getType()); - poItem = pl.get(6); - assertEquals("heith_", poItem.getName()); - assertEquals("number", poItem.getType()); - } - - @Test - void parseCStreamClass_2() { - String testClass = testClass2; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List eol = po.getClassList(); - assertEquals(1, eol.size()); - ClassObj co = eol.get(0); - assertEquals("Person", co.getName()); - List pl = co.getParamList(); - assertEquals(2, pl.size()); - ParamObj poItem = pl.get(0); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pl.get(1); - assertEquals("nameAbs", poItem.getName()); - assertEquals("string", poItem.getType()); - List fol = co.getFuncList(); - assertEquals(2, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("constructor", foItem.getName()); - List pol = foItem.getParamList(); - assertEquals(1, pol.size()); - poItem = pol.get(0); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - foItem = fol.get(1); - assertEquals("find", foItem.getName()); - assertEquals("Person", foItem.getRetValue()); - pol = foItem.getParamList(); - assertEquals(1, pol.size()); - poItem = pol.get(0); - assertEquals("string", poItem.getType()); - - } - - @Test - void parseCStreamClass_3() { - String testClass = this.testClass3; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List eol = po.getClassList(); - assertEquals(1, eol.size()); - ClassObj co = eol.get(0); - List pl = co.getParamList(); - assertEquals(3, pl.size()); - ParamObj poItem = pl.get(1); - assertEquals("value", poItem.getName()); - assertEquals("int", poItem.getType()); - poItem = pl.get(2); - assertEquals("nameAbs", poItem.getName()); - assertEquals("string", poItem.getType()); - List fol = co.getFuncList(); - assertEquals(3, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("constructor", foItem.getName()); - List pol = foItem.getParamList(); - assertEquals(2, pol.size()); - poItem = pol.get(0); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pol.get(1); - assertEquals("value", poItem.getName()); - assertEquals("int", poItem.getType()); - - foItem = fol.get(1); - assertEquals("find", foItem.getName()); - assertEquals("Person", foItem.getRetValue()); - pol = foItem.getParamList(); - assertEquals(2, pol.size()); - poItem = pol.get(0); - assertEquals("target", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pol.get(1); - assertEquals("cnt", poItem.getName()); - assertEquals("int", poItem.getType()); - - foItem = fol.get(2); - assertEquals("add", foItem.getName()); - assertEquals("Person", foItem.getRetValue()); - pol = foItem.getParamList(); - assertEquals(2, pol.size()); - poItem = pol.get(0); - assertEquals("int", poItem.getName()); - assertEquals("int", poItem.getType()); - poItem = pol.get(1); - assertEquals("string", poItem.getType()); - } - - @Test - void parseCStreamClass_4() { - String testClass = testClass4; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List eol = po.getClassList(); - assertEquals(1, eol.size()); - ClassObj co = eol.get(0); - List pl = co.getParamList(); - assertEquals(3, pl.size()); - ParamObj poItem = pl.get(0); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pl.get(1); - assertEquals("value", poItem.getName()); - assertEquals("int", poItem.getType()); - poItem = pl.get(2); - assertEquals("nameAbs", poItem.getName()); - assertEquals("string", poItem.getType()); - List fol = co.getFuncList(); - assertEquals(3, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("constructor", foItem.getName()); - List pol = foItem.getParamList(); - assertEquals(2, pol.size()); - poItem = pol.get(0); - assertEquals("string", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pol.get(1); - assertEquals("int", poItem.getType()); - - foItem = fol.get(1); - assertEquals("find", foItem.getName()); - assertEquals("Person", foItem.getRetValue()); - pol = foItem.getParamList(); - assertEquals(1, pol.size()); - poItem = pol.get(0); - assertEquals("string", poItem.getName()); - assertEquals("string", poItem.getType()); - - foItem = fol.get(2); - assertEquals("add", foItem.getName()); - assertEquals("Person", foItem.getRetValue()); - pol = foItem.getParamList(); - assertEquals(2, pol.size()); - poItem = pol.get(0); - assertEquals("int", poItem.getName()); - assertEquals("int", poItem.getType()); - poItem = pol.get(1); - assertEquals("string", poItem.getName()); - assertEquals("string", poItem.getType()); - } - - @Test - void parseCStreamClass_5() { - String testClass = testClass5; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List col = po.getClassList(); - assertEquals(1, col.size()); - ClassObj coItem = col.get(0); - assertEquals("Employee", coItem.getName()); - List hnl = coItem.getHeritageNameList(); - assertEquals(1, hnl.size()); - assertEquals("Person", hnl.get(0)); - List htl = coItem.getHeritageTypeList(); - assertEquals(1, htl.size()); - assertEquals("extends", htl.get(0)); - List pol = coItem.getParamList(); - assertEquals(1, pol.size()); - ParamObj poItem = pol.get(0); - assertEquals("empCode", poItem.getName()); - assertEquals("number", poItem.getType()); - List fol = coItem.getFuncList(); - assertEquals(2, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("constructor", foItem.getName()); - assertEquals("void", foItem.getRetValue()); - pol = foItem.getParamList(); - assertEquals(2, pol.size()); - poItem = pol.get(0); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pol.get(1); - assertEquals("code", poItem.getName()); - assertEquals("number", poItem.getType()); - foItem = fol.get(1); - assertEquals("find", foItem.getName()); - assertEquals("Person", foItem.getRetValue()); - pol = foItem.getParamList(); - assertEquals(1, pol.size()); - poItem = pol.get(0); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - } - - @Test - void parseCStreamClass_6() { - String testClass = testClass6; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List col = po.getClassList(); - assertEquals(1, col.size()); - ClassObj coItem = col.get(0); - assertEquals("Person", coItem.getName()); - List htl = coItem.getHeritageTypeList(); - List hnl = coItem.getHeritageNameList(); - assertEquals("implements", htl.get(0)); - assertEquals("IPerson", hnl.get(0)); - List pol = coItem.getParamList(); - assertEquals(5, pol.size()); - ParamObj poItem = pol.get(0); - assertEquals("string", poItem.getType()); - assertEquals("publicString", poItem.getName()); - assertEquals("public", poItem.getQualifier()); - poItem = pol.get(1); - assertEquals("string", poItem.getType()); - assertEquals("privateString", poItem.getName()); - assertEquals("private", poItem.getQualifier()); - poItem = pol.get(2); - assertEquals("string", poItem.getType()); - assertEquals("protectedString", poItem.getName()); - assertEquals("protected", poItem.getQualifier()); - poItem = pol.get(3); - assertEquals("string", poItem.getType()); - assertEquals("readonlyString", poItem.getName()); - assertEquals("readonly", poItem.getQualifier()); - poItem = pol.get(4); - assertEquals("string", poItem.getType()); - assertEquals("name", poItem.getName()); - List fol = coItem.getFuncList(); - assertEquals(1, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("constructor", foItem.getName()); - assertEquals("void", foItem.getRetValue()); - pol = foItem.getParamList(); - assertEquals(1, pol.size()); - poItem = pol.get(0); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - } - - @Test - void parseCStreamClass_7_1() { - String testClass = testClass7; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List col = po.getClassList(); - assertEquals(2, col.size()); - ClassObj coItem = col.get(0); - assertEquals("Person", coItem.getName()); - List hnl = coItem.getHeritageNameList(); - assertEquals(1, hnl.size()); - assertEquals("IPerson", hnl.get(0)); - List htl = coItem.getHeritageTypeList(); - assertEquals(1, htl.size()); - assertEquals("implements", htl.get(0)); - List pol = coItem.getParamList(); - assertEquals(5, pol.size()); - ParamObj poItem = pol.get(0); - assertEquals("public", poItem.getQualifier()); - assertEquals("publicString", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pol.get(1); - assertEquals("private", poItem.getQualifier()); - assertEquals("privateString", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pol.get(2); - assertEquals("protected", poItem.getQualifier()); - assertEquals("protectedString", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pol.get(3); - assertEquals("readonly", poItem.getQualifier()); - assertEquals("readonlyString", poItem.getName()); - assertEquals("string", poItem.getType()); - poItem = pol.get(4); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - List fol = coItem.getFuncList(); - assertEquals(1, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("constructor", foItem.getName()); - assertEquals("void", foItem.getRetValue()); - } - - @Test - void parseCStreamClass_7_2() { - CodePointCharStream cStream = CharStreams.fromString(testClass7); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List col = po.getClassList(); - assertEquals(2, col.size()); - - ClassObj coItem = col.get(1); - assertEquals("Employee", coItem.getName()); - List hnl = coItem.getHeritageNameList(); - assertEquals(1, hnl.size()); - assertEquals("Person", hnl.get(0)); - List htl = coItem.getHeritageTypeList(); - assertEquals(1, htl.size()); - assertEquals("extends", htl.get(0)); - List pol = coItem.getParamList(); - assertEquals(3, pol.size()); - ParamObj poItem = pol.get(0); - assertEquals("empCode", poItem.getName()); - assertEquals("number", poItem.getType()); - assertEquals("currentUser", pol.get(1).getName()); - assertEquals("any", pol.get(1).getType()); - assertEquals("pi", pol.get(2).getName()); - assertEquals("number", pol.get(2).getType()); - assertEquals("static", pol.get(2).getQualifier()); - List fol = coItem.getFuncList(); - assertEquals(4, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("constructor", foItem.getName()); - pol = foItem.getParamList(); - assertEquals(2, pol.size()); - poItem = pol.get(0); - assertEquals("empcode", poItem.getName()); - assertEquals("number", poItem.getType()); - poItem = pol.get(1); - assertEquals("name", poItem.getName()); - assertEquals("string", poItem.getType()); - foItem = fol.get(1); - assertEquals("user", foItem.getName()); - assertEquals("get", foItem.getType()); - pol = foItem.getParamList(); - assertEquals(0, pol.size()); - foItem = fol.get(2); - assertEquals("user", foItem.getName()); - assertEquals("set", foItem.getType()); - pol = foItem.getParamList(); - assertEquals(1, pol.size()); - assertEquals("usr", pol.get(0).getName()); - assertEquals("any", pol.get(0).getType()); - assertEquals("displayName", fol.get(3).getName()); - assertEquals(0, fol.get(3).getParamList().size()); - } - - @Test - void parseCStreamClass_8() { - String testClass = testClass8; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List col = po.getClassList(); - assertEquals(1, col.size()); - ClassObj coItem = col.get(0); - assertEquals("myClass", coItem.getName()); - List fol = coItem.getFuncList(); - assertEquals(1, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("foo", foItem.getName()); - assertEquals("Promise", foItem.getRetValue()); - assertEquals("async", foItem.getType()); - assertEquals("public", foItem.getAccessor()); - } - - @Test - void parseCStreamClass_9() { - String testClass = testClass9; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List col = po.getClassList(); - assertEquals(1, col.size()); - ClassObj coItem = col.get(0); - assertEquals("NotController", coItem.getName()); - List fol = coItem.getFuncList(); - assertEquals(1, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("notControllerPost", foItem.getName()); - List pol = foItem.getParamList(); - assertEquals(1, pol.size()); - assertEquals("body", pol.get(0).getName()); - } - - @Test - void parseCStreamClass_10() { - String testClass = testClass10; - CodePointCharStream cStream = CharStreams.fromString(testClass); - ParseBase parser = ParseFactory.getParser("ts"); - ParseObj po = parser.parseCStream(cStream); - List col = po.getClassList(); - assertEquals(1, col.size()); - ClassObj coItem = col.get(0); - assertEquals("CustomerModel", coItem.getName()); - List fol = coItem.getFuncList(); - assertEquals(1, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("constructor", foItem.getName()); - List pol = foItem.getParamList(); - assertEquals(1, pol.size()); - assertEquals("data", pol.get(0).getName()); - } - @Test void parseCStreamFunc_1() { ParseBase parser = ParseFactory.getParser("ts"); @@ -1088,70 +702,234 @@ class ParseTsTest { } @Test - void parseCStreamInterface() { + void parseCStreamFunc_19() { ParseBase parser = ParseFactory.getParser("ts"); - String testInterface = testInterface1; - CodePointCharStream cStream = CharStreams.fromString(testInterface); + String testFunc = testFunc19; + CodePointCharStream cStream = CharStreams.fromString(testFunc); ParseObj po = parser.parseCStream(cStream); - List iol = po.getInterfaceList(); - assertEquals(1, iol.size()); - InterfaceObject ioItem = iol.get(0); - List fol = ioItem.getFuncList(); + List fol = po.getFuncList(); assertEquals(1, fol.size()); - FuncObj foItem = fol.get(0); - assertEquals("", foItem.getName()); - assertEquals("void", foItem.getRetValue()); - List pol = foItem.getParamList(); + assertEquals("getArray", fol.get(0).getName()); + assertEquals("T[]", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); assertEquals(1, pol.size()); - ParamObj poItem = pol.get(0); - assertEquals("msg", poItem.getName()); - assertEquals("string", poItem.getType()); + assertEquals("items", pol.get(0).getName()); + assertEquals("T[]", pol.get(0).getType()); } @Test - void parseCStreamType() { + void parseCStreamFunc_20() { ParseBase parser = ParseFactory.getParser("ts"); - String testType = "export type TestShap_t = TestShape;"; - CodePointCharStream cStream = CharStreams.fromString(testType); + String testFunc = testFunc20; + CodePointCharStream cStream = CharStreams.fromString(testFunc); ParseObj po = parser.parseCStream(cStream); - List tol = po.getTypeList(); - assertEquals(1, tol.size()); - TypeObj toItem = tol.get(0); - assertEquals("TestShap_t", toItem.getName()); - List tl = toItem.getTypeList(); - assertEquals(1, tl.size()); - assertEquals("TestShape", tl.get(0)); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("getArray", fol.get(0).getName()); + assertEquals("myNumArr", fol.get(0).getAlias()); + assertEquals("void", fol.get(0).getRetValue()); + assertEquals("", fol.get(0).getTemplate(0)); + List pol = fol.get(0).getParamList(); + assertEquals(1, pol.size()); + assertEquals("[100,200,300]", pol.get(0).getStrValue(0)); + } @Test - void receive() { + void parseCStreamFunc_21() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc21; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("getArray", fol.get(0).getName()); + assertEquals("myStrArr", fol.get(0).getAlias()); + assertEquals("void", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(1, pol.size()); + assertEquals("[\"Hello\",\"World\"]", pol.get(0).getStrValue(0)); + } @Test - void parseEnum() { + void parseCStreamFunc_22() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc22; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("displayType", fol.get(0).getName()); + assertEquals("T", fol.get(0).getTemplate(0)); + assertEquals("U", fol.get(0).getTemplate(1)); + assertEquals("void", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(2, pol.size()); + assertEquals("id", pol.get(0).getName()); + assertEquals("T", pol.get(0).getType()); + assertEquals("name", pol.get(1).getName()); + assertEquals("U", pol.get(1).getType()); } @Test - void parseUnion() { + void parseCStreamFunc_23() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc23; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("displayTypeNon", fol.get(0).getName()); + assertEquals("T", fol.get(0).getTemplate(0)); + assertEquals("void", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(2, pol.size()); + assertEquals("id", pol.get(0).getName()); + assertEquals("T", pol.get(0).getType()); + assertEquals("name", pol.get(1).getName()); + assertEquals("string", pol.get(1).getType()); } @Test - void parseStruct() { + void parseCStreamFunc_24() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc24; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("displayNames", fol.get(0).getName()); + assertEquals("T", fol.get(0).getTemplate(0)); + assertEquals("void", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(1, pol.size()); + assertEquals("names", pol.get(0).getName()); + assertEquals("T[]", pol.get(0).getType()); } @Test - void parseClass() { + void parseCStreamFunc_25() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc25; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("display", fol.get(0).getName()); + assertEquals("T", fol.get(0).getTemplate(0)); + assertEquals("void", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(1, pol.size()); + assertEquals("per", pol.get(0).getName()); + assertEquals("T", pol.get(0).getType()); } @Test - void parseFunc() { + void parseCStreamFunc_26() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc26; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("genericWithKeyOf", fol.get(0).getName()); + assertEquals("T", fol.get(0).getTemplate(0)); + assertEquals("K", fol.get(0).getTemplate(1)); + assertEquals("T[]", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(2, pol.size()); + assertEquals("list", pol.get(0).getName()); + assertEquals("T[]", pol.get(0).getType()); + assertEquals("field", pol.get(1).getName()); + assertEquals("K", pol.get(1).getType()); } @Test - void parseType() { + void parseCStreamFunc_27() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc27; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("genericParameterWithDefault", fol.get(0).getName()); + assertEquals("T", fol.get(0).getTemplate(0)); + assertEquals("void", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(1, pol.size()); + assertEquals("field", pol.get(0).getName()); + assertEquals("T", pol.get(0).getType()); } @Test - void handleEvent() { + void parseCStreamFunc_28() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc28; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("processNumKeyPairs", fol.get(0).getName()); + assertEquals("void", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(2, pol.size()); + assertEquals("key", pol.get(0).getName()); + assertEquals("number", pol.get(0).getType()); + assertEquals("value", pol.get(1).getName()); + assertEquals("number", pol.get(1).getType()); + } + + @Test + void parseCStreamFunc_29() { + ParseBase parser = ParseFactory.getParser("ts"); + String testFunc = testFunc29; + CodePointCharStream cStream = CharStreams.fromString(testFunc); + ParseObj po = parser.parseCStream(cStream); + List fol = po.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("processEntity", fol.get(0).getName()); + assertEquals("void", fol.get(0).getRetValue()); + List pol = fol.get(0).getParamList(); + assertEquals(1, pol.size()); + assertEquals("e", pol.get(0).getName()); + assertEquals("Entity", pol.get(0).getType()); + assertEquals(TsToken.TS_TOKEN_OPTIONAL, pol.get(0).getDecorator()); + } + + @Test + void parseCStreamInterface() { + ParseBase parser = ParseFactory.getParser("ts"); + String testInterface = testInterface1; + CodePointCharStream cStream = CharStreams.fromString(testInterface); + ParseObj po = parser.parseCStream(cStream); + List iol = po.getInterfaceList(); + assertEquals(1, iol.size()); + InterfaceObject ioItem = iol.get(0); + List fol = ioItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("", foItem.getName()); + assertEquals("void", foItem.getRetValue()); + List pol = foItem.getParamList(); + assertEquals(1, pol.size()); + ParamObj poItem = pol.get(0); + assertEquals("msg", poItem.getName()); + assertEquals("string", poItem.getType()); + } + + @Test + void parseCStreamType() { + ParseBase parser = ParseFactory.getParser("ts"); + String testType = "export type TestShap_t = TestShape;"; + CodePointCharStream cStream = CharStreams.fromString(testType); + ParseObj po = parser.parseCStream(cStream); + List tol = po.getTypeList(); + assertEquals(1, tol.size()); + TypeObj toItem = tol.get(0); + assertEquals("TestShap_t", toItem.getName()); + List tl = toItem.getTypeList(); + assertEquals(1, tl.size()); + assertEquals("TestShape", tl.get(0)); } } \ No newline at end of file diff --git a/src/intellij_plugin/ohosgen/src/test/java/parse/ParseTsTestClass.java b/src/intellij_plugin/ohosgen/src/test/java/parse/ParseTsTestClass.java new file mode 100644 index 0000000000000000000000000000000000000000..4a0ec80cf5d3eded123440dbc5767a74483d150e --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/test/java/parse/ParseTsTestClass.java @@ -0,0 +1,1490 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package parse; + +import grammar.*; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CodePointCharStream; +import org.junit.jupiter.api.Test; +import utils.TsToken; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + *

类名:该类用于xxx

+ * description + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ +class ParseTsTestClass { + + String testClass2 = "abstract class Person {\n" + + " name: string;\n" + + "\n" + + " constructor(name: string) {\n" + + " this.name = name;\n" + + " }\n" + + "\n" + + " abstract find(target: string): Person;\n" + + " abstract nameAbs: string;\n" + + "}"; + + String testClass3 = "abstract class Person {\n" + + " name: string;\n" + + " value: int;\n" + + "\n" + + " constructor(name: string, value: int) {\n" + + " this.name = name;\n" + + " this.value = value;\n" + + " }\n" + + "\n" + + " abstract find(target: string, cnt: int): Person;\n" + + " abstract add(int, string): Person;\n" + + " abstract nameAbs: string;\n" + + "}"; + + String testClass4 = "abstract class Person {\n" + + " name: string;\n" + + " value: int;\n" + + "\n" + + " constructor(string, int) {\n" + + " this.name = name;\n" + + " this.value = value;\n" + + " }\n" + + "\n" + + " abstract find(string): Person;\n" + + " abstract add(int, string): Person;\n" + + " abstract nameAbs: string;\n" + + "}"; + + String testClass5 = "class Employee extends Person {\n" + + " empCode: number;\n" + + "\n" + + " constructor(name: string, code: number) {\n" + + " super(name); // must call super()\n" + + " this.empCode = code;\n" + + " }\n" + + "\n" + + " find(name:string): Person {\n" + + " // execute AJAX request to find an employee from a db\n" + + " return new Employee(name, 1);\n" + + " }\n" + + "}"; + + String testInterface1 = "export interface CallbackTest {\n" + + "\t(msg: string): void;\n" + + "};"; + + String testInterface2 = "interface IPerson {\n" + + " name: string;\n" + + "}"; + + String testInterface3 = "interface IKeyValueProcessor\n" + + "{\n" + + " process(key: T, val: U): void;\n" + + "};"; + + String testInterface4 = "interface IProcessor\n" + + "{\n" + + " result:T;\n" + + " process(a: T, b: T) => T;\n" + + "}"; + + String testInterface5 = "interface KeyPair {\n" + + " key: T;\n" + + " value: U;\n" + + "}"; + + String testInterface6 = "interface KeyValueProcessor\n" + + "{\n" + + " (key: T, val: U): void;\n" + + "};"; + + String testInterface7 = "export interface IPerson {\n" + + " name: string;\n" + + " gender: string;\n" + + "}"; + + String testInterface8 = "interface IEmployee extends IPerson{\n" + + " empCode: number;\n" + + " readonly empName: string;\n" + + " empDept?:string;\n" + + " getSalary: (number) => number; // arrow function\n" + + " getManagerName(number): string;\n" + + "}"; + + String testInterface9 = "declare interface IRouteInfo {\n" + + " path: string;\n" + + " title: string;\n" + + " icon: string;\n" + + " class: string;\n" + + " allowAnonymous: boolean;\n" + + "}"; + + String testInterface10 = "interface KeyPair {\n" + + " key: number;\n" + + " value: string;\n" + + "}\n"; + + String testInterface11 = "interface NumList {\n" + + " [index:string]:string\n" + + "}"; + + String testInterface12 = "interface IStringList {\n" + + " [index:string]:string\n" + + "}"; + + String testClass6 = "interface IPerson {\n" + + " name: string;\n" + + "}\n" + + "\n" + + "class Person implements IPerson {\n" + + " public publicString: string;\n" + + " private privateString: string;\n" + + " protected protectedString: string;\n" + + " readonly readonlyString: string;\n" + + " name: string;\n" + + "\n" + + " constructor(name: string) {\n" + + " this.name = name;\n" + + " }\n" + + "}"; + + String testClass7 = "interface IPerson {\n" + + " name: string;\n" + + "}\n" + + "\n" + + "class Person implements IPerson {\n" + + " public publicString: string;\n" + + " private privateString: string;\n" + + " protected protectedString: string;\n" + + " readonly readonlyString: string;\n" + + " name: string;\n" + + "\n" + + " constructor(name: string) {\n" + + " this.name = name;\n" + + " }\n" + + "}\n" + + "\n" + + "class Employee extends Person {\n" + + " empCode: number;\n" + + " currentUser: any;\n" + + " static pi: number = 3.14;\n" + + "\n" + + " constructor(empcode: number, name:string) {\n" + + " super(name);\n" + + " this.empCode = empcode;\n" + + " }\n" + + "\n" + + " get user() {\n" + + " return this.currentUser;\n" + + " }\n" + + "\n" + + " set user(usr: any) {\n" + + " this.currentUser = usr;\n" + + " }\n" + + "\n" + + " displayName():void {\n" + + " console.log(\"Name = \" + this.name + \", Employee Code = \" + this.empCode);\n" + + " }\n" + + "}"; + + String testClass8 = "export class myClass {\n" + + " public async foo( ): Promise {\n" + + " }\n" + + "}"; + + String testClass9 = "export class NotController {\n" + + " @Post()\n" + + " notControllerPost(body) {\n" + + " return 'This is not an api method';\n" + + " }\n" + + "}"; + + String testClass10 = "export default class CustomerModel {\n" + + " constructor(data) {\n" + + " this.cardAccountId = data.cardAccountId;\n" + + " this.accountHolderId = data.accountHolderId;\n" + + " this.firstName = data.firstName;\n" + + " this.lastName = data.lastName;\n" + + " }\n" + + "}"; + + String testClass11 = "class KeyValuePair\n" + + "{\n" + + " private key: T;\n" + + " private val: U;\n" + + "\n" + + " setKeyValue(key: T, val: U): void {\n" + + " this.key = key;\n" + + " this.val = val;\n" + + " }\n" + + "\n" + + " display():void {\n" + + " console.log(`Key = ${this.key}, val = ${this.val}`);\n" + + " }\n" + + "}"; + + String testClass12 = "class kvProcessor implements IKeyValueProcessor\n" + + "{\n" + + " process(key:T, val:U):void {\n" + + " console.log(`Key = ${key}, val = ${val}`);\n" + + " }\n" + + "}"; + + String testClass13 = "class Employee implements IEmployee {\n" + + " empCode: number;\n" + + " name: string;\n" + + "\n" + + " constructor(code: number, name: string) {\n" + + " this.empCode = code;\n" + + " this.name = name;\n" + + " }\n" + + "\n" + + " getSalary(empCode:number):number {\n" + + " return 20000;\n" + + " }\n" + + "}"; + + String testClass14 = "class Shape {\n" + + " constructor (id, x, y) {\n" + + " this.id = id\n" + + " this.move(x, y)\n" + + " }\n" + + " move (x, y) {\n" + + " this.x = x\n" + + " this.y = y\n" + + " }\n" + + "}"; + + String testClass15 = "class Rectangle extends Shape {\n" + + " constructor (id, x, y, width, height) {\n" + + " super(id, x, y)\n" + + " this.width = width\n" + + " this.height = height\n" + + " }\n" + + "}"; + + String testClass16 = "class Circle extends Shape {\n" + + " constructor (id, x, y, radius) {\n" + + " super(id, x, y)\n" + + " this.radius = radius\n" + + " }\n" + + "}"; + + String testClass17 = "var aggregation = (baseClass, ...mixins) => {\n" + + "let base = class _Combined extends baseClass {\n" + + " constructor (...args) {\n" + + " super(...args)\n" + + " mixins.forEach((mixin) => {\n" + + " mixin.prototype.initializer.call(this)\n" + + " })\n" + + " }\n" + + "}\n" + + "let copyProps = (target, source) => {\n" + + " Object.getOwnPropertyNames(source)\n" + + " .concat(Object.getOwnPropertySymbols(source))\n" + + " .forEach((prop) => {\n" + + " if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/))\n" + + " return\n" + + " Object.defineProperty(target, prop, Object.getOwnPropertyDescriptor(source, prop))\n" + + " })\n" + + "}\n" + + "mixins.forEach((mixin) => {\n" + + " copyProps(base.prototype, mixin.prototype)\n" + + " copyProps(base, mixin)\n" + + "})\n" + + "return base\n" + + "}"; + + String testClass18 = "class Colored {\n" + + " initializer () { this._color = \"white\" }\n" + + " get color () { return this._color }\n" + + " set color (v) { this._color = v }\n" + + "}"; + + String testClass19 = "class ZCoord {\n" + + " initializer () { this._z = 0 }\n" + + " get z () { return this._z }\n" + + " set z (v) { this._z = v }\n" + + "}"; + + String testClass20 = "class Shape {\n" + + " constructor (x, y) { this._x = x; this._y = y }\n" + + " get x () { return this._x }\n" + + " set x (v) { this._x = v }\n" + + " get y () { return this._y }\n" + + " set y (v) { this._y = v }\n" + + "}"; + + String testClass21 = "class Rectangle extends aggregation(Shape, Colored, ZCoord) {}"; + + String testClass22 = "class Shape {\n" + + " // …\n" + + " toString () {\n" + + " return `Shape(${this.id})`\n" + + " }\n" + + "}"; + + String testClass23 = "class Rectangle extends Shape {\n" + + " constructor (id, x, y, width, height) {\n" + + " super(id, x, y)\n" + + " // …\n" + + " }\n" + + "\n" + + " toString () {\n" + + " return \"Rectangle > \" + super.toString()\n" + + " }\n" + + "}"; + + String testClass24 = "class Circle extends Shape {\n" + + " constructor (id, x, y, radius) {\n" + + " super(id, x, y)\n" + + " // …\n" + + " }\n" + + " toString () {\n" + + " return \"Circle > \" + super.toString()\n" + + " }\n" + + "}"; + + String testClass25 = "class Rectangle extends Shape {\n" + + " // …\n" + + " static contextTypes = {\n" + + " router: PropTypes.object,\n" + + " };\n" + + "\n" + + " static defaultRectangle () {\n" + + " return new Rectangle(\"default\", 0, 0, 100, 100)\n" + + " }\n" + + "}"; + + String testClass26 = "class Circle extends Shape {\n" + + " // …\n" + + " static defaultCircle () {\n" + + " return new Circle(\"default\", 0, 0, 100)\n" + + " }\n" + + "}"; + + String testClass27 = "class Rectangle {\n" + + " constructor (width, height) {\n" + + " this._width = width\n" + + " this._height = height\n" + + " }\n" + + " set width (width) { this._width = width }\n" + + " get width () { return this._width }\n" + + " set height (height) { this._height = height }\n" + + " get height () { return this._height }\n" + + " get area () { return this._width * this._height }\n" + + "}"; + + String testClass28 = "class A {\n" + + " ;\n" + + "}"; + + String testClass29 = "class B {\n" + + " get [runtimeCalc]() {return 1};\n" + + " set [runtimeCalc](p) {};\n" + + " get 'string as key'() {};\n" + + "}"; + + String testClass30 = "const PREFIX = \"prefix\";" + + "class ClassWithField {\n" + + " field;\n" + + " fieldWithInitializer = \"instance field\";\n" + + " [`${PREFIX}Field`] = \"prefixed field\";\n" + + "}"; + + String testClass31 = "class ClassWithStaticInitializationBlock {\n" + + " static staticProperty1 = 'Property 1';\n" + + " static staticProperty2;\n" + + " static {\n" + + " this.staticProperty2 = 'Property 2';\n" + + " }\n" + + "}"; + + String testClass32 = "export class Employee {\n" + + " empCode: number;\n" + + " empName: string;\n" + + " constructor(name: string, code: number) {\n" + + " this.empName = name;\n" + + " this.empCode = code;\n" + + " }\n" + + " displayEmployee() {\n" + + " console.log (\"Employee Code: \" + this.empCode + \", Employee Name: \" + this.empName );\n" + + " }\n" + + "}"; + + String testClass33 = "class O{\n" + + " i = 1;\n" + + "}"; + + String testClass34 = "class Entity{\n" + + " name = \"test\";\n" + + " obj = new O();\n" + + "}\n"; + + @Test + void parseCStreamClass_1() { + String testClass = "export class Box {\n" + + "\tlines: number;\n" + + "\tsrcType: TestEnum;\n" + + "\tdestType1: TestSt3;\n" + + "\tdesType2: TestShap_t;\n" + + "\tdesType3: TestUnion3_t;\n" + + "\tcalcArea: number;\n" + + "\theith_: number;\n" + + "\ttransform2D(calcCB: Calculate): boolean;\n" + + "\ttransform3D(ctCB: CallbackTest): boolean;\n" + + "};"; + ParseBase parser = ParseFactory.getParser("ts"); + + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseObj po = parser.parseCStream(cStream); + List eol = po.getClassList(); + assertEquals(1, eol.size()); + ClassObj co = eol.get(0); + assertEquals("Box", co.getName()); + List pl = co.getParamList(); + assertEquals(7, pl.size()); + ParamObj poItem = pl.get(0); + assertEquals("lines", poItem.getName()); + assertEquals("number", poItem.getType()); + poItem = pl.get(1); + assertEquals("srcType", poItem.getName()); + assertEquals("TestEnum", poItem.getType()); + poItem = pl.get(2); + assertEquals("destType1", poItem.getName()); + assertEquals("TestSt3", poItem.getType()); + poItem = pl.get(3); + assertEquals("desType2", poItem.getName()); + assertEquals("TestShap_t", poItem.getType()); + poItem = pl.get(4); + assertEquals("desType3", poItem.getName()); + assertEquals("TestUnion3_t", poItem.getType()); + poItem = pl.get(5); + assertEquals("calcArea", poItem.getName()); + assertEquals("number", poItem.getType()); + poItem = pl.get(6); + assertEquals("heith_", poItem.getName()); + assertEquals("number", poItem.getType()); + } + + @Test + void parseCStreamClass_2() { + String testClass = testClass2; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List eol = po.getClassList(); + assertEquals(1, eol.size()); + ClassObj co = eol.get(0); + assertEquals("Person", co.getName()); + List pl = co.getParamList(); + assertEquals(2, pl.size()); + ParamObj poItem = pl.get(0); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pl.get(1); + assertEquals("nameAbs", poItem.getName()); + assertEquals("string", poItem.getType()); + List fol = co.getFuncList(); + assertEquals(2, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(1, pol.size()); + poItem = pol.get(0); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + foItem = fol.get(1); + assertEquals("find", foItem.getName()); + assertEquals("Person", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(1, pol.size()); + poItem = pol.get(0); + assertEquals("string", poItem.getType()); + + } + + @Test + void parseCStreamClass_3() { + String testClass = this.testClass3; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List eol = po.getClassList(); + assertEquals(1, eol.size()); + ClassObj co = eol.get(0); + List pl = co.getParamList(); + assertEquals(3, pl.size()); + ParamObj poItem = pl.get(1); + assertEquals("value", poItem.getName()); + assertEquals("int", poItem.getType()); + poItem = pl.get(2); + assertEquals("nameAbs", poItem.getName()); + assertEquals("string", poItem.getType()); + List fol = co.getFuncList(); + assertEquals(3, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(2, pol.size()); + poItem = pol.get(0); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pol.get(1); + assertEquals("value", poItem.getName()); + assertEquals("int", poItem.getType()); + + foItem = fol.get(1); + assertEquals("find", foItem.getName()); + assertEquals("Person", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(2, pol.size()); + poItem = pol.get(0); + assertEquals("target", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pol.get(1); + assertEquals("cnt", poItem.getName()); + assertEquals("int", poItem.getType()); + + foItem = fol.get(2); + assertEquals("add", foItem.getName()); + assertEquals("Person", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(2, pol.size()); + poItem = pol.get(0); + assertEquals("int", poItem.getName()); + assertEquals("int", poItem.getType()); + poItem = pol.get(1); + assertEquals("string", poItem.getType()); + } + + @Test + void parseCStreamClass_4() { + String testClass = testClass4; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List eol = po.getClassList(); + assertEquals(1, eol.size()); + ClassObj co = eol.get(0); + List pl = co.getParamList(); + assertEquals(3, pl.size()); + ParamObj poItem = pl.get(0); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pl.get(1); + assertEquals("value", poItem.getName()); + assertEquals("int", poItem.getType()); + poItem = pl.get(2); + assertEquals("nameAbs", poItem.getName()); + assertEquals("string", poItem.getType()); + List fol = co.getFuncList(); + assertEquals(3, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(2, pol.size()); + poItem = pol.get(0); + assertEquals("string", poItem.getName()); + assertEquals("void", poItem.getType()); + poItem = pol.get(1); + assertEquals("int", poItem.getName()); + assertEquals("void", poItem.getType()); + + foItem = fol.get(1); + assertEquals("find", foItem.getName()); + assertEquals("Person", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(1, pol.size()); + poItem = pol.get(0); + assertEquals("string", poItem.getName()); + assertEquals("string", poItem.getType()); + + foItem = fol.get(2); + assertEquals("add", foItem.getName()); + assertEquals("Person", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(2, pol.size()); + poItem = pol.get(0); + assertEquals("int", poItem.getName()); + assertEquals("int", poItem.getType()); + poItem = pol.get(1); + assertEquals("string", poItem.getName()); + assertEquals("string", poItem.getType()); + } + + @Test + void parseCStreamClass_5() { + String testClass = testClass5; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Employee", coItem.getName()); + List hnl = coItem.getHeritageNameList(); + assertEquals(1, hnl.size()); + assertEquals("Person", hnl.get(0)); + List htl = coItem.getHeritageTypeList(); + assertEquals(1, htl.size()); + assertEquals("extends", htl.get(0)); + List pol = coItem.getParamList(); + assertEquals(1, pol.size()); + ParamObj poItem = pol.get(0); + assertEquals("empCode", poItem.getName()); + assertEquals("number", poItem.getType()); + List fol = coItem.getFuncList(); + assertEquals(2, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + assertEquals("void", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(2, pol.size()); + poItem = pol.get(0); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pol.get(1); + assertEquals("code", poItem.getName()); + assertEquals("number", poItem.getType()); + foItem = fol.get(1); + assertEquals("find", foItem.getName()); + assertEquals("Person", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(1, pol.size()); + poItem = pol.get(0); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + } + + @Test + void parseCStreamClass_6() { + String testClass = testClass6; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Person", coItem.getName()); + List htl = coItem.getHeritageTypeList(); + List hnl = coItem.getHeritageNameList(); + assertEquals("implements", htl.get(0)); + assertEquals("IPerson", hnl.get(0)); + List pol = coItem.getParamList(); + assertEquals(5, pol.size()); + ParamObj poItem = pol.get(0); + assertEquals("string", poItem.getType()); + assertEquals("publicString", poItem.getName()); + assertEquals("public", poItem.getQualifier()); + poItem = pol.get(1); + assertEquals("string", poItem.getType()); + assertEquals("privateString", poItem.getName()); + assertEquals("private", poItem.getQualifier()); + poItem = pol.get(2); + assertEquals("string", poItem.getType()); + assertEquals("protectedString", poItem.getName()); + assertEquals("protected", poItem.getQualifier()); + poItem = pol.get(3); + assertEquals("string", poItem.getType()); + assertEquals("readonlyString", poItem.getName()); + assertEquals("readonly", poItem.getQualifier()); + poItem = pol.get(4); + assertEquals("string", poItem.getType()); + assertEquals("name", poItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + assertEquals("void", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(1, pol.size()); + poItem = pol.get(0); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + } + + @Test + void parseCStreamClass_7_1() { + String testClass = testClass7; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(2, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Person", coItem.getName()); + List hnl = coItem.getHeritageNameList(); + assertEquals(1, hnl.size()); + assertEquals("IPerson", hnl.get(0)); + List htl = coItem.getHeritageTypeList(); + assertEquals(1, htl.size()); + assertEquals("implements", htl.get(0)); + List pol = coItem.getParamList(); + assertEquals(5, pol.size()); + ParamObj poItem = pol.get(0); + assertEquals("public", poItem.getQualifier()); + assertEquals("publicString", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pol.get(1); + assertEquals("private", poItem.getQualifier()); + assertEquals("privateString", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pol.get(2); + assertEquals("protected", poItem.getQualifier()); + assertEquals("protectedString", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pol.get(3); + assertEquals("readonly", poItem.getQualifier()); + assertEquals("readonlyString", poItem.getName()); + assertEquals("string", poItem.getType()); + poItem = pol.get(4); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + assertEquals("void", foItem.getRetValue()); + } + + @Test + void parseCStreamClass_7_2() { + CodePointCharStream cStream = CharStreams.fromString(testClass7); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(2, col.size()); + + ClassObj coItem = col.get(1); + assertEquals("Employee", coItem.getName()); + List hnl = coItem.getHeritageNameList(); + assertEquals(1, hnl.size()); + assertEquals("Person", hnl.get(0)); + List htl = coItem.getHeritageTypeList(); + assertEquals(1, htl.size()); + assertEquals("extends", htl.get(0)); + List pol = coItem.getParamList(); + assertEquals(3, pol.size()); + ParamObj poItem = pol.get(0); + assertEquals("empCode", poItem.getName()); + assertEquals("number", poItem.getType()); + assertEquals("currentUser", pol.get(1).getName()); + assertEquals("any", pol.get(1).getType()); + assertEquals("pi", pol.get(2).getName()); + assertEquals("number", pol.get(2).getType()); + assertEquals("static", pol.get(2).getQualifier()); + List fol = coItem.getFuncList(); + assertEquals(4, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + pol = foItem.getParamList(); + assertEquals(2, pol.size()); + poItem = pol.get(0); + assertEquals("empcode", poItem.getName()); + assertEquals("number", poItem.getType()); + poItem = pol.get(1); + assertEquals("name", poItem.getName()); + assertEquals("string", poItem.getType()); + foItem = fol.get(1); + assertEquals("user", foItem.getName()); + assertEquals("get", foItem.getType()); + pol = foItem.getParamList(); + assertEquals(0, pol.size()); + foItem = fol.get(2); + assertEquals("user", foItem.getName()); + assertEquals("set", foItem.getType()); + pol = foItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("usr", pol.get(0).getName()); + assertEquals("any", pol.get(0).getType()); + assertEquals("displayName", fol.get(3).getName()); + assertEquals(0, fol.get(3).getParamList().size()); + } + + @Test + void parseCStreamClass_8() { + String testClass = testClass8; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("myClass", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("foo", foItem.getName()); + assertEquals("Promise", foItem.getRetValue()); + assertEquals("async", foItem.getType()); + assertEquals("public", foItem.getAccessor()); + } + + @Test + void parseCStreamClass_9() { + String testClass = testClass9; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("NotController", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("notControllerPost", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("body", pol.get(0).getName()); + } + + @Test + void parseCStreamClass_10() { + String testClass = testClass10; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("CustomerModel", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("data", pol.get(0).getName()); + } + + @Test + void parseCStreamClass_11() { + String testClass = testClass11; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("KeyValuePair", coItem.getName()); + assertEquals(2, coItem.getParamList().size()); + assertEquals("T", coItem.getTempList().get(0)); + assertEquals("U", coItem.getTempList().get(1)); + + List fol = coItem.getFuncList(); + assertEquals(2, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("setKeyValue", foItem.getName()); + assertEquals("void", foItem.getRetValue()); + List pol = foItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("key", pol.get(0).getName()); + assertEquals("T", pol.get(0).getType()); + assertEquals("val", pol.get(1).getName()); + assertEquals("U", pol.get(1).getType()); + + pol = coItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("key", pol.get(0).getName()); + assertEquals("T", pol.get(0).getType()); + assertEquals("private", pol.get(0).getQualifier()); + + assertEquals("val", pol.get(1).getName()); + assertEquals("U", pol.get(1).getType()); + assertEquals("private", pol.get(1).getQualifier()); + } + + @Test + void parseCStreamClass_12() { + String testClass = testClass12; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("kvProcessor", coItem.getName()); + assertEquals("T", coItem.getTempList().get(0)); + assertEquals("U", coItem.getTempList().get(1)); + assertEquals("IKeyValueProcessor", coItem.getHeritageNameList().get(0)); + assertEquals("implements", coItem.getHeritageTypeList().get(0)); + assertEquals("T", coItem.getHeritageTemplateList().get(0)); + assertEquals("U", coItem.getHeritageTemplateList().get(1)); + + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("process", foItem.getName()); + assertEquals("", foItem.getType()); + List pol = foItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("key", pol.get(0).getName()); + assertEquals("T", pol.get(0).getType()); + assertEquals("val", pol.get(1).getName()); + assertEquals("U", pol.get(1).getType()); + } + + @Test + void parseCStreamClass_13() { + String testClass = testClass13; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Employee", coItem.getName()); + assertEquals("IEmployee", coItem.getHeritageNameList().get(0)); + assertEquals("implements", coItem.getHeritageTypeList().get(0)); + + List fol = coItem.getFuncList(); + assertEquals(2, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("code", pol.get(0).getName()); + assertEquals("number", pol.get(0).getType()); + assertEquals("name", pol.get(1).getName()); + assertEquals("string", pol.get(1).getType()); + + foItem = fol.get(1); + assertEquals("getSalary", foItem.getName()); + assertEquals("number", foItem.getRetValue()); + pol = foItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("empCode", pol.get(0).getName()); + assertEquals("number", pol.get(0).getType()); + + pol = coItem.getParamList(); + assertEquals("empCode", pol.get(0).getName()); + assertEquals("number", pol.get(0).getType()); + assertEquals("name", pol.get(1).getName()); + assertEquals("string", pol.get(1).getType()); + } + + @Test + void parseCStreamClass_14() { + String testClass = testClass14; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Shape", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(2, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(3, pol.size()); + assertEquals("id", pol.get(0).getName()); + assertEquals("x", pol.get(1).getName()); + assertEquals("y", pol.get(2).getName()); + foItem = fol.get(1); + assertEquals("move", foItem.getName()); + pol = foItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("x", pol.get(0).getName()); + assertEquals("y", pol.get(1).getName()); + } + + @Test + void parseCStreamClass_15() { + String testClass = testClass15; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Rectangle", coItem.getName()); + assertEquals("Shape", coItem.getHeritageNameList().get(0)); + assertEquals("extends", coItem.getHeritageTypeList().get(0)); + + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(5, pol.size()); + assertEquals("id", pol.get(0).getName()); + assertEquals("x", pol.get(1).getName()); + assertEquals("y", pol.get(2).getName()); + assertEquals("width", pol.get(3).getName()); + assertEquals("height", pol.get(4).getName()); + + } + + @Test + void parseCStreamClass_16() { + String testClass = testClass16; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Circle", coItem.getName()); + assertEquals("Shape", coItem.getHeritageNameList().get(0)); + assertEquals("extends", coItem.getHeritageTypeList().get(0)); + + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(4, pol.size()); + assertEquals("id", pol.get(0).getName()); + assertEquals("x", pol.get(1).getName()); + assertEquals("y", pol.get(2).getName()); + assertEquals("radius", pol.get(3).getName()); + } + + @Test + void parseCStreamClass_17() { + String testClass = testClass17; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("_Combined", coItem.getName()); + assertEquals("baseClass", coItem.getHeritageNameList().get(0)); + assertEquals("extends", coItem.getHeritageTypeList().get(0)); + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + assertEquals("constructor", fol.get(0).getName()); + + } + + @Test + void parseCStreamClass_18() { + String testClass = testClass18; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Colored", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(3, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("initializer", foItem.getName()); + foItem = fol.get(1); + assertEquals("color", foItem.getName()); + assertEquals("get", foItem.getType()); + foItem = fol.get(2); + assertEquals("color", foItem.getName()); + assertEquals("set", foItem.getType()); + List pol = foItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("v", pol.get(0).getName()); + } + + @Test + void parseCStreamClass_19() { + String testClass = testClass19; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("ZCoord", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(3, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("initializer", foItem.getName()); + foItem = fol.get(1); + assertEquals("z", foItem.getName()); + assertEquals("get", foItem.getType()); + foItem = fol.get(2); + assertEquals("z", foItem.getName()); + assertEquals("set", foItem.getType()); + List pol = foItem.getParamList(); + assertEquals("v", pol.get(0).getName()); + } + + @Test + void parseCStreamClass_20() { + String testClass = testClass20; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Shape", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(5, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("x", pol.get(0).getName()); + assertEquals("y", pol.get(1).getName()); + + foItem = fol.get(1); + assertEquals("x", foItem.getName()); + assertEquals("get", foItem.getType()); + + foItem = fol.get(2); + assertEquals("x", foItem.getName()); + assertEquals("set", foItem.getType()); + pol = foItem.getParamList(); + assertEquals("v", pol.get(0).getName()); + + foItem = fol.get(3); + assertEquals("y", foItem.getName()); + assertEquals("get", foItem.getType()); + + foItem = fol.get(4); + assertEquals("y", foItem.getName()); + assertEquals("set", foItem.getType()); + pol = foItem.getParamList(); + assertEquals("v", pol.get(0).getName()); + } + + @Test + void parseCStreamClass_21() { + String testClass = testClass21; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + /** + * aggregation 是JavaScript支持的多继承方法,ts不支持 + */ + assertEquals(0, col.size()); + + } + + @Test + void parseCStreamClass_22() { + String testClass = testClass22; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Shape", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("toString", foItem.getName()); + + } + + @Test + void parseCStreamClass_23() { + String testClass = testClass23; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Rectangle", coItem.getName()); + assertEquals("Shape", coItem.getHeritageNameList().get(0)); + assertEquals("extends", coItem.getHeritageTypeList().get(0)); + + List fol = coItem.getFuncList(); + assertEquals(2, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(5, pol.size()); + assertEquals("id", pol.get(0).getName()); + assertEquals("x", pol.get(1).getName()); + assertEquals("y", pol.get(2).getName()); + assertEquals("width", pol.get(3).getName()); + assertEquals("height", pol.get(4).getName()); + foItem = fol.get(1); + assertEquals("toString", foItem.getName()); + + } + + @Test + void parseCStreamClass_24() { + String testClass = testClass24; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Circle", coItem.getName()); + assertEquals("Shape", coItem.getHeritageNameList().get(0)); + assertEquals("extends", coItem.getHeritageTypeList().get(0)); + + List fol = coItem.getFuncList(); + assertEquals(2, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(4, pol.size()); + assertEquals("id", pol.get(0).getName()); + assertEquals("x", pol.get(1).getName()); + assertEquals("y", pol.get(2).getName()); + assertEquals("radius", pol.get(3).getName()); + + foItem = fol.get(1); + assertEquals("toString", foItem.getName()); + } + + @Test + void parseCStreamClass_25() { + String testClass = testClass25; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Rectangle", coItem.getName()); + assertEquals("Shape", coItem.getHeritageNameList().get(0)); + assertEquals("extends", coItem.getHeritageTypeList().get(0)); + + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("defaultRectangle", foItem.getName()); + List pol = coItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("contextTypes", pol.get(0).getName()); + assertEquals("void", pol.get(0).getType()); + assertEquals("static", pol.get(0).getQualifier()); + } + + @Test + void parseCStreamClass_26() { + String testClass = testClass26; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Circle", coItem.getName()); + assertEquals("Shape", coItem.getHeritageNameList().get(0)); + assertEquals("extends", coItem.getHeritageTypeList().get(0)); + List fol = coItem.getFuncList(); + assertEquals(1, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("defaultCircle", foItem.getName()); + assertEquals("", foItem.getType()); + + } + + @Test + void parseCStreamClass_27() { + String testClass = testClass27; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Rectangle", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(6, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("width", pol.get(0).getName()); + assertEquals("height", pol.get(1).getName()); + foItem = fol.get(1); + assertEquals("width", foItem.getName()); + assertEquals("set", foItem.getType()); + pol = foItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("width", pol.get(0).getName()); + foItem = fol.get(2); + assertEquals("width", foItem.getName()); + assertEquals("get", foItem.getType()); + foItem = fol.get(3); + assertEquals("height", foItem.getName()); + assertEquals("set", foItem.getType()); + pol = foItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("height", pol.get(0).getName()); + foItem = fol.get(4); + assertEquals("height", foItem.getName()); + assertEquals("get", foItem.getType()); + foItem = fol.get(5); + assertEquals("area", foItem.getName()); + assertEquals("get", foItem.getType()); + } + + @Test + void parseCStreamClass_28() { + String testClass = testClass28; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("A", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(0, fol.size()); + } + + @Test + void parseCStreamClass_29() { + String testClass = testClass29; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("B", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(3, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("[runtimeCalc]", foItem.getName()); + assertEquals("get", foItem.getType()); + foItem = fol.get(1); + assertEquals("[runtimeCalc]", foItem.getName()); + assertEquals("set", foItem.getType()); + foItem = fol.get(2); + assertEquals("'string as key'", foItem.getName()); + assertEquals("get", foItem.getType()); + } + + @Test + void parseCStreamClass_30() { + String testClass = testClass30; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("ClassWithField", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(0, fol.size()); + List pol = coItem.getParamList(); + assertEquals("field", pol.get(0).getName()); + assertEquals("fieldWithInitializer", pol.get(1).getName()); + assertEquals("\"instance field\"", pol.get(1).getStrValue(0)); + assertEquals("[`${PREFIX}Field`]", pol.get(2).getName()); + assertEquals("\"prefixed field\"", pol.get(2).getStrValue(0)); + } + + @Test + void parseCStreamClass_31() { + String testClass = testClass31; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("ClassWithStaticInitializationBlock", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(0, fol.size()); + List pol = coItem.getParamList(); + assertEquals(2, pol.size()); + + assertEquals("staticProperty1", pol.get(0).getName()); + assertEquals("void", pol.get(0).getType()); + assertEquals("static", pol.get(0).getQualifier()); + assertEquals("'Property 1'", pol.get(0).getStrValue(0)); + assertEquals("staticProperty2", pol.get(1).getName()); + assertEquals("void", pol.get(1).getType()); + assertEquals("static", pol.get(1).getQualifier()); + + } + + @Test + void parseCStreamClass_32() { + String testClass = testClass32; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Employee", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(2, fol.size()); + FuncObj foItem = fol.get(0); + assertEquals("constructor", foItem.getName()); + List pol = foItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("name", pol.get(0).getName()); + assertEquals("string", pol.get(0).getType()); + assertEquals("code", pol.get(1).getName()); + assertEquals("number", pol.get(1).getType()); + foItem = fol.get(1); + assertEquals("displayEmployee", foItem.getName()); + } + + @Test + void parseCStreamClass_33() { + String testClass = testClass33; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("O", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(0, fol.size()); + List pol = coItem.getParamList(); + assertEquals(1, pol.size()); + assertEquals("i", pol.get(0).getName()); + assertEquals("1", pol.get(0).getStrValue(0)); + + } + + @Test + void parseCStreamClass_34() { + String testClass = testClass34; + CodePointCharStream cStream = CharStreams.fromString(testClass); + ParseBase parser = ParseFactory.getParser("ts"); + ParseObj po = parser.parseCStream(cStream); + List col = po.getClassList(); + assertEquals(1, col.size()); + ClassObj coItem = col.get(0); + assertEquals("Entity", coItem.getName()); + List fol = coItem.getFuncList(); + assertEquals(0, fol.size()); + List pol = coItem.getParamList(); + assertEquals(2, pol.size()); + assertEquals("name", pol.get(0).getName()); + assertEquals("\"test\"", pol.get(0).getStrValue(0)); + } + +} \ No newline at end of file