Package junit.extensions.eclipse.quick.javadoc

Source Code of junit.extensions.eclipse.quick.javadoc.SearchJavaClassFromDocTagVisitorTest

package junit.extensions.eclipse.quick.javadoc;

import static org.junit.Assert.assertEquals;
import static junit.extensions.eclipse.quick.javadoc.CreateTestProjectUtil.*;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.contribution.junit.javadoc.test.TestProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.search.SearchMatch;
import org.eclipse.jdt.core.search.SearchRequestor;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

public class SearchJavaClassFromDocTagVisitorTest {

  private static TestProject project;
  private static ASTParser parser;
  private static IType type;
  private List<Object> results = new ArrayList<Object>();
  private String source;
  protected static IType extendsType;
 
  @BeforeClass
  public static void before() throws Exception{
    project = createTestProject();
    createType(project,"test","TestClass",
        "public class TestClass{\n" +
        "  /**\n" +
        "   *  @TestContext test.TestClass\n" +
        "   */\n" +
        "  @org.junit.Test\n" +
        "  public void do_test() throws Exception{\n" +
        "  }\n" +
        "  public void do_test(String str) throws Exception{\n" +
        "  }\n" +
        "  public void do_test(String str,Object obj) throws Exception{\n" +
        "  }\n" +
        "}\n");
    createType(project,"test", "TestClass2",
        "public class TestClass2{\n" +
        "  /**\n" +
        "   *  @TestContext test.TestClass\n" +
        "   */\n" +
        "  @org.junit.Test\n" +
        "  public void do_test() throws Exception{\n" +
        "  }\n" +
        "  public void do_test2(){\n" +
        "  }\n" +
        "}\n");
    createType(project,"test", "TestClassExtendsTestClass",
        "import junit.framework.TestCase\n" +
        "import org.junit.Test\n" +
        "\n" +
        "public class TestClassExtendsTestClass extends TestCase{\n" +
        "  /**\n" +
        "   *  @TestContext test.TestClass\n" +
        "   */\n" +
        "  @org.junit.Test\n" +
        "  public void do_test() throws Exception{\n" +
        "  }\n" +
        "  public void do_test2(){\n" +
        "  }\n" +
        "  public void setUp() throws Exception{\n" +
        "  }" +
        "}\n"
    );
    createType(project,"test", "Priority",
        "public enum Priority {\n" +
        "  BLOCKER,CRITICAL,MAJOR,MINOR,TRIVIAL;\n" +
        "  public void do_test(){\n" +
        "  }\n" +
        "}");
    createType(project,"test", "IDocService",
        "public interface IDocService {\n" +
        "  public void do_test();\n" +
        "}");

    type = project.getJavaProject().findType("test.TestClass");
    extendsType = project.getJavaProject().findType("test.TestClassExtendsTestClass");
  }
 
  @Before
  public void setUp() throws Exception{
    createNewParser();
  }

  private  void createNewParser() {
    parser = ASTParser.newParser(AST.JLS3);
    parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
    parser.setBindingsRecovery(true);
  }
 
  @Test
  public void emptyStringAccepted() throws Exception {
    source = "";
    assertExpectZeroResultAndVisit();
  }
 
 
  @Test
  public void illegalJavaSourceAccepted() throws Exception {
    source = "test";
    assertExpectZeroResultAndVisit();
    source =
        "public class TestClass{\n" +
        "]";// <- Illegal Close Blanket
    assertExpectZeroResultAndVisit();
    source =
      "public void test(){\n" +
      "]"; // <- Illegal Close Blanket
    assertExpectZeroResultAndVisit();
  }

  @Test
  public void assertNoTagsContainedOnMethod() {
    source =
      "public void test(){}";
    assertExpectZeroResultAndVisit();
    source =
      "public void test(){\n" +
      "  System.out.println(\"test\")\n" +
      "}";
    assertExpectZeroResultAndVisit();
  }

  @Test
  public void assertNoTagsContainedOnClass() {
    source =
      "public class TestOnClassOnlyClassDecralation{\n" +
      "}\n";
    assertExpectZeroResultAndVisit();
    source =
      "public class TestOnClass{\n" +
      "  public void test(){\n" +
      "    System.out.println(\"test\")\n" +
      "  }\n" +
      "}\n";
    assertExpectZeroResultAndVisit();
  }
 
  @Test
  public void assertOneTagContainedOnMethod() {
    assertClassOnMethod();
    assertFQCNClassOnMethod();
//    assertCurrentMethodOnMethod();
//    assertMethodOnMethod();
    assertNotExistClassOnMethod();
//    assertSameSigunatureMethodFromExtendsClassOnMethod();
    assertInterface();
    assertEnum();
    assertAnnotation();
  }

  @Test
  @Ignore
  public void assertPolimophism() {
    source =
      "/**\n" +
      " * @TestContext TestClass#do_test(String)\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
    source =
      "/**\n" +
      " * @TestContext TestClass#do_test(String,Object)\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
  }
 
  @Test
  @Ignore
  public void assertPoliphonismSameClass() throws Exception {
    source =
      "/**\n" +
      " * @TestContext #do_test(String)\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
    source =
      "/**\n" +
      " * @TestContext #do_test(String,Object)\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
  }

  private void assertAnnotation() {
    source =
      "/**\n" +
      " * @TestContext org.junit.Test\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
  }

  private void assertEnum() {
    source =
      "/**\n" +
      " * @TestContext test.Priority\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
//    source =
//      "/**\n" +
//      " * @TestContext Priority\n" +
//      " */\n" +
//      "public void do_test() throws Exception{\n" +
//      "}\n";
//    assertExpectOneResultAndVisit();
  }

  private void assertNotExistClassOnMethod() {
    source =
      "/**\n" +
      // wrong word TestCase -> TestCaze
      " * @TestContext junit.framework.TestCaze\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectZeroResultAndVisit();
  }

  private void assertFQCNClassOnMethod() {
    source =
      "/**\n" +
      " * @TestContext junit.framework.TestCase\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();   
    source =
    "/**\n" +
    " * @TestContext test.TestClass2" +
    " */\n" +
    "public void do_test() throws Exception{\n" +
    "}\n";
    assertExpectOneResultAndVisit();   
  }

//  private void assertMethodOnMethod() {
//    source =
//      "/**\n" +
//      " * @TestContext junit.framework.TestCase#setUp()\n" +
//      " */\n" +
//      "public void do_test() throws Exception{\n" +
//      "}\n";
//    assertExpectOneResultAndVisit();   
//    source =
//      "/**\n" +
//      " * @TestContext TestClass2#do_test()\n" +
//      " */\n" +
//      "public void do_test() throws Exception{\n" +
//      "}\n";
//    assertExpectOneResultAndVisit();
//  }
//
//  private void assertCurrentMethodOnMethod() {
//    source =
//      "/**\n" +
//      " * @TestContext #do_test()\n" +
//      " */\n" +
//      "public void do_test() throws Exception{\n" +
//      "}\n";
//    assertExpectOneResultAndVisit();
//  }

  private void assertClassOnMethod() {
    source =
      "/**\n" +
      " * @TestContext TestClass2\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
  }
 
  private void assertInterface() {
    source =
      "/**\n" +
      " * @TestContext test.IDocService\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
    source =
      "/**\n" +
      " * @TestContext IDocService\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
  }

//  private void assertSameSigunatureMethodFromExtendsClassOnMethod() {
//    source =
//      "/**\n" +
//      " * @TestContext #setUp()\n" +
//      " */\n" +
//      "public void do_test() throws Exception{\n" +
//      "}\n";
//    assertAndVisit(SearchJavaClassFromDocTagVisitorTest.extendsType);
//    assertEquals(1,results.size());
//    results.clear();
//  }

  @Test
  @Ignore
  public void assertSameSignatureMethodFromExtendsClassOnMethods() {
    source =
      "/**\n" +
      " * @TestContext TestClass#do_test()\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectOneResultAndVisit();
  }

  @Test
  @Ignore
  public void assertTwoTagsContainedOnMethod() {
    assertTwoTagsClassTwoTagsOnMethod();
    assertTwoTagsMethodOnMethod();
    assertTwoTagsNotExistClassOnMethod();
  }
 
  private void assertTwoTagsNotExistClassOnMethod() {
    source =
      "/**\n" +
      " * @TestContext #do_tast()\n" + // #do_test <= #do_tast
      " * @TestContext #start()\n" // not exist method
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectZeroResultAndVisit();
  }

  private void assertTwoTagsMethodOnMethod() {
    source =
      "/**\n" +
      " * @TestContext #do_test()\n" +
      " * @TestContext junit.framework.TestCase#setUp()\n"
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectTwoResultsAndVisit();
  }

  private void assertTwoTagsClassTwoTagsOnMethod() {
    source =
      "/**\n" +
      " * @TestContext TestSuite\n" +
      " * @TestContext TestResult\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectTwoResultsAndVisit();   
    source =
      "/**\n" +
      " * @TestContext test.TestClass\n" +
      " * @TestContext TestSuite\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectTwoResultsAndVisit();   
    source =
      "/**\n" +
      " * @TestContext test.TestClass\n" +
      " * @TestContext junit.framework.TestCase\n" +
      " */\n" +
      "public void do_test() throws Exception{\n" +
      "}\n";
    assertExpectTwoResultsAndVisit();   
  }

  private void assertExpectTwoResultsAndVisit() {
    assertAndVisit();
    assertResults(2);
  }

  private void assertResults(int i) {
    try{
      assertEquals(i,results.size());
    }catch(AssertionError e){
      System.err.println(source);
      System.err.println(results);
      throw e;
    }finally{
      results.clear();
    }
  }

  private void assertExpectOneResultAndVisit() {
    assertAndVisit();
    assertResults(1);
  }

  private void assertExpectZeroResultAndVisit() {
    assertAndVisit();
    assertResults(0);
  }


  private void assertAndVisit() {
    assertAndVisit(SearchJavaClassFromDocTagVisitorTest.type);
  }
 
  private void assertAndVisit(IType type) {
    SearchRequestor requester = new SearchRequestor(){
      @Override
      public void acceptSearchMatch(SearchMatch match) throws CoreException {
        Object element = match.getElement();
        if (element instanceof IType) {
          IType type = (IType) element;
          System.out.println(String.format("match type:'%s'",type.getFullyQualifiedName()));
        }else if(element instanceof IMethod){
          IMethod method = (IMethod) element;
          System.out.println(String.format("match method:'%s'",method.getElementName()));
        }
        results.add(element);
      }
    };
    ASTVisitor visitor = new SearchJavaClassFromDocTagVisitor(type,requester);
    createNewParser();
    if(source != null){
      parser.setSource(source.toCharArray());
    }
    ASTNode node = parser.createAST(null);
    node.accept(visitor);
  }
 
  @AfterClass
  public static void after() throws Exception{
    project.dispose();
  }

  /*
   * ���������������Source���Null������������NullPointerException������������������
   * NullPointerException���������������������������������������������assert������������
   * Test������������������������������
   */
  @Test
  @Ignore
  public void nullStringAccepted() throws Exception {
    source = null;
    assertExpectZeroResultAndVisit();   
  }
 
//  public void pattern() throws Exception {
//    CharSequence patternString = "#test(param,param2)";
//    Pattern methodPattern = Pattern.compile("#(.*)\\((.*)\\)");
//    Matcher matcher = methodPattern.matcher(patternString);
//    assertTrue(matcher.matches());
//    String name = matcher.group(1);
//    assertEquals("test",name);
//    String param = matcher.group(2);
//    assertEquals("param,param2",param);
//  }

}
TOP

Related Classes of junit.extensions.eclipse.quick.javadoc.SearchJavaClassFromDocTagVisitorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.