Package org.testng.eclipse.util

Source Code of org.testng.eclipse.util.SuiteBuilder

package org.testng.eclipse.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.testng.eclipse.launch.components.ITestContent;
import org.testng.eclipse.ui.util.TypeParser;
import org.testng.eclipse.util.signature.IMethodDescriptor;
import org.testng.eclipse.util.signature.MethodDescriptor;
import org.testng.reporters.XMLStringBuffer;
import org.testng.xml.Parser;

/**
* Utility class that builds a temporary suite definition file.
*
* @author <a href='mailto:the_mindstorm@evolva.ro'>Alexandru Popescu</a>
*/
public class SuiteBuilder {

  public static File createSuite(IJavaProject ijp, IType[] types, IJavaElement ije) {
   
    XMLStringBuffer xmlSuite = getSuiteBuffer(ije.getElementName());
   
    if(IJavaElement.COMPILATION_UNIT == ije.getElementType()) {
      createClassTest(types, ije, xmlSuite);
    }
    else if(IJavaElement.TYPE == ije.getElementType()) {
      createClassTest(types, ije, xmlSuite);
    }
    else if(IJavaElement.METHOD == ije.getElementType()) {
      createMethodTest(types, ije, xmlSuite);
    }

    xmlSuite.pop("suite");
    final String projectPath = ijp.getProject().getLocation().toOSString();
   
    File file = new File(projectPath, ije.getElementName() + ".xml");
    ppp("saving to file " + file.getAbsolutePath());


    saveFileContent(file, xmlSuite);
    return file;
  }

//  private static String convert(String annotationType) {
//    AnnotationTypeEnum annoType= AnnotationTypeEnum.JDK;
//    try {
//      annoType= AnnotationTypeEnum.valueOf(annotationType);
//    }
//    catch(RuntimeException re) {
//      TestNGPlugin.log(new Status(IStatus.INFO,
//                                  TestNGPlugin.PLUGIN_ID,
//                                  1,
//                                  "Unknown annotation type '" + annotationType + "' Using default: " + TestNG.JDK_ANNOTATION_TYPE,
//                                  null));
//    }
//   
//    return annoType.toString();
//  }
 
  private static void createClassTest(IType[] types, IJavaElement ije, XMLStringBuffer buf) {
    String testName = "Test " + ije.getElementName();
    Properties attrs = new Properties();
    attrs.setProperty("name", testName);
   
    Properties clsAttrs = new Properties();
    for(int i = 0; i < types.length; i++) {
      ITestContent content = TypeParser.parseType(types[i]);
     
      if(content.hasTestMethods()) {
//        attrs.setProperty("annotations", convert(content.getAnnotationType()));
       
        if(i == 0) {
          buf.push("test", attrs);
          buf.push("classes");
        }
       
        clsAttrs.setProperty("name", types[i].getFullyQualifiedName());
        buf.push("class", clsAttrs);
        buf.pop("class");
      }
    }
   
    buf.pop("classes");
    buf.pop("test");
  }
 
  private static void createMethodTest(IType[] types, IJavaElement ije, XMLStringBuffer buf) {
    String testName = "Method test " + ije.getElementName();
    Properties attrs = new Properties();
    attrs.setProperty("name", testName);
   
    IType type = types[0];
    ITestContent content = TypeParser.parseType(type);
    if(!content.hasTestMethods()) {
      return;
    }
   
    Set testMethods = content.getTestMethods();
    IMethodDescriptor testMethodDescriptor = new MethodDescriptor((IMethod) ije);
    Properties methodAttrs = new Properties();
    for(Iterator it = testMethods.iterator(); it.hasNext(); ) {
      IMethodDescriptor imd = (IMethodDescriptor) it.next();
      if(imd.equals(testMethodDescriptor)) {
//        attrs.setProperty("annotations", convert(imd.getAnnotationType()));
        methodAttrs.setProperty("name", imd.getName());
      }
    }
   
    buf.push("test", attrs);
    buf.push("methods");
    buf.push("method", methodAttrs);
    buf.pop("method");
    buf.pop("methods");
   
    buf.push("classes");
    Properties clsAttrs = new Properties();
    clsAttrs.setProperty("name", type.getFullyQualifiedName());
    buf.push("class", clsAttrs);
    buf.pop("class");
    buf.pop("classes");
    buf.pop("test");
  }
 
  private static XMLStringBuffer getSuiteBuffer(String name) {
    XMLStringBuffer xmlBuf = new XMLStringBuffer(); //$NON-NLS-1$
    xmlBuf.setDocType("suite SYSTEM " + Parser.TESTNG_DTD_URL);
    Properties attrs = new Properties();
    attrs.setProperty("name", name);
    xmlBuf.push("suite", attrs);

    return xmlBuf;
  }
 
  private static final void saveFileContent(final File file, final XMLStringBuffer xmlBuffer) {
    FileWriter fw = null;
    BufferedWriter bw = null;
    try {
      fw = new FileWriter(file);
      bw = new BufferedWriter(fw);
      bw.write(xmlBuffer.getStringBuffer().toString());
      bw.flush();
    }
    catch(IOException ioe) {
    }
    finally {
      if(null != bw) {
        try {
          bw.close();
        }
        catch(IOException ioe) {
          ;
        }
      }
      if(null != fw) {
        try {
          fw.close();
        }
        catch(IOException ioe) {
          ;
        }
      }
      bw = null;
      fw = null;
    }
  }
 
  private static void ppp(Object msg) {
    System.out.println("[SuiteBuilder]: " + msg);
  }
}
TOP

Related Classes of org.testng.eclipse.util.SuiteBuilder

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.