package cn.org.rapid_framework.generator.provider.java.model; import java.io.File; import java.util.Arrays; import java.util.List; import junit.framework.TestCase; import cn.org.rapid_framework.generator.GeneratorFacade; import cn.org.rapid_framework.generator.provider.java.model.JavaMethod.FieldMethodInvocation; import cn.org.rapid_framework.generator.provider.java.model.JavaMethod.JavaMethodInvokeSequencesParser; import cn.org.rapid_framework.generator.provider.java.model.testservicebean.AbstractBlogServiceBean; import cn.org.rapid_framework.generator.provider.java.model.testservicebean.BlogServiceBean; import cn.org.rapid_framework.generator.util.IOHelper; public class JavaMethodInvokeFlowsTest extends TestCase{ public void test_get_JavaMethodInvokeFlows() { JavaClass clazz = new JavaClass(GeneratorFacade.class); JavaMethod method = clazz.getMethod("deleteOutRootDir"); JavaMethodInvokeSequencesParser executor = new JavaMethodInvokeSequencesParser(method,clazz.getMavenJavaSourceFileContent()); executor.execute(); List<FieldMethodInvocation> invokes = executor.getMethodInvokeSequences(); System.out.println(invokes); verifyInvokeFlows(invokes,"generator.deleteOutRootDir"); } public void test_get_JavaMethodInvokeFlows_no_execute() { JavaClass clazz = new JavaClass(GeneratorFacade.class); JavaMethod method = clazz.getMethod("deleteOutRootDir"); JavaMethodInvokeSequencesParser executor = new JavaMethodInvokeSequencesParser(method,clazz.getMavenJavaSourceFileContent()); try { List<FieldMethodInvocation> invokes = executor.getMethodInvokeSequences(); fail("还没有执行execute()方法"); }catch(IllegalStateException e) { } } public void test_get_JavaMethodInvokeFlows_with_BlogServiceBean() { test_getMethodInvokeSequences("testSay",BlogServiceBean.class,"esb.say","csb.bb","esb.hello","csb.aa","esb.say","csb.cc"); } public void test_get_JavaMethodInvokeFlows_with_blogjava() { test_getMethodInvokeSequences("blogjava",BlogServiceBean.class,"csb.bb","esb.say","esb.hello","csb.aa","csb.cc"); } public void test_get_JavaMethodInvokeFlows_with_chain_call() { test_getMethodInvokeSequences("chain_call",BlogServiceBean.class,"csb.bb","esb.say","csb.dd","csb.aa","csb.cc"); } public void test_get_JavaMethodInvokeFlows_with_array_args() { test_getMethodInvokeSequences("array_args",BlogServiceBean.class,"csb.bb","csb.aa"); } public void test_get_JavaMethodInvokeFlows_with_call_other_method() { //TODO JavaMethodInvokeFlows 方法调用其它方法还没有修正 // test_getMethodInvokeSequences("call_other_method",BlogServiceBean.class,"csb.bb","esb.say","csb.dd","csb.aa","csb.cc","csb.bb","esb.say","esb.hello","csb.aa","csb.cc"); } public void test_get_JavaMethodInvokeFlows_with_SuperClass() { test_getMethodInvokeSequences("absInvoke",AbstractBlogServiceBean.class,"topicServiceBean.a1","topicServiceBean.a2"); //TODO JavaMethodInvokeFlows test_get_JavaMethodInvokeFlows_with_SuperClass还没有修正 // try { // test_getMethodInvokeSequences("absInvoke",BlogServiceBean.class,"emailServiceBean.say","emailServiceBean.hello"); // fail("shoud not found method"); // }catch(Exception e){ // } } public void test_getMethodInvokeSequences(String methodName,Class clazz, String... expected) { JavaClass javaClazz = new JavaClass(clazz); JavaMethod method = javaClazz.getMethod(methodName); JavaMethodInvokeSequencesParser executor = new JavaMethodInvokeSequencesParser(method,IOHelper.readFile(new File(javaClazz.getMavenJavaSourceFile()))); executor.execute(); List<FieldMethodInvocation> invokes = executor.getMethodInvokeSequences(); System.out.println(invokes); verifyInvokeFlows(invokes,expected); } private void verifyInvokeFlows(List<FieldMethodInvocation> invokes, String... expected) { assertEquals("real:"+invokes+" expected:"+Arrays.toString(expected),invokes.size(),expected.length); for(int i = 0; i < invokes.size(); i++) { String methodName = invokes.get(i).getMethod().getMethodName(); String fieldName = invokes.get(i).getField().getFieldName(); assertEquals(fieldName+"."+methodName,expected[i]); // assertEquals(methodName,expected[i]); // assertEquals(fieldName,expected[i]); } } }