package com.github.geequery.codegen.ast; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Test; import com.github.geequery.codegen.ast.DefaultJavaElement; import com.github.geequery.codegen.ast.IClass; import com.github.geequery.codegen.ast.JavaField; import com.github.geequery.codegen.ast.JavaMethod; import com.github.geequery.codegen.ast.JavaUnit; public class JavaUnitTest { @Test public void testReorderFields() { String unitName="com.github.geequery.codegen.ast.JavaUnit"; JavaUnit ju=new JavaUnit(unitName); ju.protectMode=false; //当为protected模式时,新增的方法和字段不能覆盖已有的方法或字段 JavaField element1=new JavaField(String.class,"file1"); JavaField element2=new JavaField(Integer.class,"file2"); JavaField element3=new JavaField(Integer.class,"file3"); // ju.addImport(org.apache.commons.logging.LogFactory.class); // JavaField logField = new JavaField(Log.class, "log"); // logField.setModifiers(Modifier.PRIVATE); // logField.setInitValue("LogFactory.getLog(" + ju.getSimpleName() + ".class)"); // ju.addField(logField); ju.addField("element1", element1); ju.addField("element2", element2); ju.addField("element3", element3); ju.addField("element3",element3); List<String> list=new ArrayList<String>(); list.add("element2"); list.add("element3"); ju.reorderFields(list); // MAP 中 重新排序 for(String fieldName : ju.getFieldNames()){ System.out.println("### reorder field: "+fieldName); } Assert.assertEquals(element1, ju.getField("element1")); Assert.assertEquals(element2, ju.getFieldAsJavaField("element2")); Assert.assertEquals(element3 ,ju.getField("element3")); // Assert.assertEquals(3, ju.getFieldNames().length); System.out.println(ju.toString()); } @Test public void testFindMethod (){ String unitName="com.github.geequery.codegen.ast.JavaUnit"; JavaUnit ju=new JavaUnit(unitName); IClass intClass=new IClass.RealClass(Integer.class); IClass strClass=new IClass.RealClass(String.class); //生成方法名 JavaMethod findMethod=new JavaMethod("findObject"); // 生成方法的参数 findMethod.clearInputArgs(); // JavaParameter intParameter=new JavaParameter(findMethod,"intParameter",intClass,1); // JavaParameter strParameter=new JavaParameter(findMethod,"strParameter",strClass,1); findMethod.addparam(intClass,"intParameter",0); findMethod.addparam(strClass,"strParameter",0); Assert.assertEquals("intParameter", findMethod.getParameter(0).getName()); Assert.assertEquals("strParameter", findMethod.getParameter(1).getName()); System.out.println("parammeter(0) name:"+findMethod.getParameter(0).getName()); System.out.println("parammeter(1) name:"+findMethod.getParameter(1).getName()); // 生成方法内的代码 findMethod.putAttribute("attribute1", "intParameter.intValue();"); // findMethod.putAttribute("attribute2", "Integer.parseInt(strParameter);"); // findMethod.appendCode("int num1= $attribute1$"); findMethod.appendCode("int num2= $attribute2$"); findMethod.addContent("int num=num1+num2;"); findMethod.addContent("return String.valueOf(num);"); //生成方法的返回类型 findMethod.setReturnType("String"); // ju.addMethod("findObject(Integer,String)", findMethod); JavaMethod methodReturn =(JavaMethod) ju.getMethod("findObject", "Integer","String"); Assert.assertNotNull(methodReturn); System.out.println("method name:"+methodReturn.getName()); System.out.println(ju.toString()); // 打印整个方法 } @Test public void testUpdateMethod (){ String unitName="com.github.geequery.codegen.ast.JavaUnit"; JavaUnit ju=new JavaUnit(unitName); JavaMethod updateMethod=new JavaMethod("updateObject"); updateMethod.addparam(java.sql.Statement.class, "arg1"); updateMethod.addparam(jef.database.jsqlparser.visitor.Statement.class, "arg2"); updateMethod.putAttribute("attribute1", "intParameter.intValue();"); // updateMethod.putAttribute("attribute2", "Integer.parseInt(strParameter);"); // updateMethod.putAttribute("attribute3", "0.998"); updateMethod.appendCode("var int = $attribute1$"); updateMethod.appendCode("var String = $attribute2$"); updateMethod.appendCode("var double= $attribute3$"); ju.addMethod("updateObject", updateMethod); System.out.println(ju.toString()); Assert.assertNotNull(updateMethod.getName()); } @Test public void testFieldMethod (){ String unitName="com.github.geequery.codegen.ast.JavaUnit"; JavaUnit ju=new JavaUnit(unitName); //生成set,get 方法 JavaField strField=new JavaField(String.class,"fieldName"); ju.addFieldWithGetterAndSetter(strField); JavaField _strField2=new JavaField(String.class,"_fieldName2"); ju.addFieldWithGetterAndSetter(_strField2); JavaMethod getMethod= ju.getGetter("fieldName"); JavaMethod setMethod= ju.getSetter("fieldName"); Assert.assertNotNull(getMethod); Assert.assertNotNull(setMethod); System.out.println("### "+getMethod.getName() ); System.out.println("### "+ setMethod.getName() ); JavaMethod _getMethod= ju.getGetter("_fieldName2"); JavaMethod _setMethod= ju.getSetter("_fieldName2"); Assert.assertNotNull(_getMethod); Assert.assertNotNull(_setMethod); System.out.println("### "+_getMethod.getName() ); System.out.println("### "+_setMethod.getName() ); // System.out.println(ju.toString()); } // 测试注释生成情况 @Test public void testElement(){ JavaUnit unit=new JavaUnit("com.github.geequery.codegen.ast"); //comments DefaultJavaElement jeComments=new DefaultJavaElement(); jeComments.addComments("comments_1","comments_2"); System.out.println(jeComments.toCode(unit)); //annotation DefaultJavaElement jeAnnotation=new DefaultJavaElement(); jeAnnotation.addAnnotation("annotation_1","annotation_2"); jeAnnotation.setAnnotation("annotation_set1","annotation_set2"); String annotationStr="annotation_set1"+"\r\n\t"+"annotation_set2"+"\r\n\t\r\n"; Assert.assertEquals(annotationStr, jeAnnotation.toCode(unit)); //content DefaultJavaElement jeContent=new DefaultJavaElement(); jeContent.addContent("content","content"); jeContent.appendContent(new StringBuilder(), unit, true); Assert.assertEquals("content\r\ncontent\r\n",jeContent.toCode(unit)); } @Test public void testRemoveAnnotation(){ DefaultJavaElement java =new DefaultJavaElement(); java.addAnnotation(new String[]{"@Transactional(rollbackFor={Exception.class})", "@Controller", "@NotModified"}); java.removeAnnotation("@Transactional(rollbackFor={Exception.class})"); String[] annos = java.getAnnotation(); Assert.assertEquals(2, annos.length); System.out.println(annos); } }