blob: 7cd58c3c7539b13b367b7c2b47e3fe0442775cfe [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 by SAP AG, Walldorf.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.jaxws.utils.tests.internal.clazz;
import java.io.File;
import java.io.FileWriter;
import junit.framework.TestCase;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.jdt.core.dom.TypeDeclaration;
import org.eclipse.jst.ws.jaxws.testutils.files.TestFileUtils;
import org.eclipse.jst.ws.jaxws.testutils.project.TestProject;
import org.eclipse.jst.ws.jaxws.utils.clazz.ASTUtils;
/**
* Tests for {@link ASTUtils} class.
*
* @author Georgi Vachkov
*/
public class ASTUtilsTest extends TestCase
{
private static final String PCK = "org.eclipse.test";
private static final String SRC =
"import javax.xml.namespace.QName;" + "\n" +
"public class Test {" + "\n" +
" private final static String name = \"are\";" + "\n" +
" public Test() {}" + "\n" +
" public int createInt() {return 0;}" + "\n" +
"}";
private TestProject project;
public void manualSetUp() throws Exception
{
project = new TestProject("JavaProj_" + System.currentTimeMillis());
project.createSourceFolder("src");
}
@Override
public void tearDown() throws Exception
{
if (project != null) {
project.dispose();
}
}
public void testCreateASTFileNpe() throws Exception
{
try {
ASTUtils.getInstance().createAST((File)null, null);
} catch(NullPointerException _) {}
}
public void testCreateASTFile() throws Exception
{
final File tempJavaFile = createTempJavaFile();
ASTNode node = ASTUtils.getInstance().createAST(tempJavaFile, null);
assertNotNull(node);
assertTrue(node instanceof CompilationUnit);
}
public void testCreateASTITypeNpe() throws Exception
{
try {
ASTUtils.getInstance().createCompilationUnit((ICompilationUnit)null, null);
} catch(NullPointerException _) {}
}
public void testCreateASTIType() throws Exception
{
manualSetUp();
final IType sourceType = project.createType(project.createPackage(PCK), "Test.java", SRC);
ASTNode node = ASTUtils.getInstance().createCompilationUnit(sourceType.getCompilationUnit(), null);
assertNotNull(node);
assertTrue(node instanceof CompilationUnit);
}
public void testGetTypeDeclaration() throws Exception
{
manualSetUp();
final IType sourceType = project.createType(project.createPackage(PCK), "Test.java", SRC);
CompilationUnit unit = ASTUtils.getInstance().createCompilationUnit(sourceType.getCompilationUnit(), null);
AbstractTypeDeclaration abstractType = ASTUtils.getInstance().getTypeDeclaration("Test", unit);
assertNotNull(abstractType);
}
public void testGetTypeDeclarationForInnerType() throws Exception
{
manualSetUp();
String source = "public class Test {" +
"public static class Parameters {}" +
"}";
final IType sourceType = project.createType(project.createPackage(PCK), "Test.java", source);
CompilationUnit unit = ASTUtils.getInstance().createCompilationUnit(sourceType.getCompilationUnit(), null);
AbstractTypeDeclaration abstractType = ASTUtils.getInstance().getTypeDeclaration("Parameters", unit);
assertNotNull(abstractType);
}
public void testGetTypeSignatureForSimpleType() throws Exception
{
final String varArgSignature = getTypeSignatureForParameter("String p");
assertFalse("Signature should not start with '['", varArgSignature.toCharArray()[0] == Signature.C_ARRAY);
}
public void testGetTypeSignatureForArray() throws Exception
{
final String varArgSignature = getTypeSignatureForParameter("String[] p");
assertTrue("Signature should start with '['", varArgSignature.toCharArray()[0] == Signature.C_ARRAY);
assertFalse("Signature second caharacter must not be '['", varArgSignature.toCharArray()[1] == Signature.C_ARRAY);
}
public void testGetTypeSignatureForVarArg() throws Exception
{
final String varArgSignature = getTypeSignatureForParameter("String... p");
assertTrue("Signature should start with '['", varArgSignature.toCharArray()[0] == Signature.C_ARRAY);
assertFalse("Signature second caharacter must not be '['", varArgSignature.toCharArray()[1] == Signature.C_ARRAY);
}
public void testGetTypeSignatureForMultiDimensionalVarArg() throws Exception
{
final String varArgSignature = getTypeSignatureForParameter("String[][]... p");
assertTrue("Signature should start with '['", varArgSignature.toCharArray()[0] == Signature.C_ARRAY);
assertTrue("Signature second caharacter must be '['", varArgSignature.toCharArray()[1] == Signature.C_ARRAY);
assertTrue("Signature third caharacter must be '['", varArgSignature.toCharArray()[2] == Signature.C_ARRAY);
assertFalse("Signature fourth characted must not be '['", varArgSignature.toCharArray()[3] == Signature.C_ARRAY);
}
private String getTypeSignatureForParameter(final String paramDefinition) throws Exception
{
final ASTUtils astUtils = ASTUtils.getInstance();
manualSetUp();
String source = "public class Test { public void varArgMethod(" + paramDefinition + "){} }";
final IType sourceType = project.createType(project.createPackage(PCK), "Test.java", source);
final IMethod varargMethod = sourceType.getMethods()[0];
assertEquals("Unexpected method name", "varArgMethod", varargMethod.getElementName());
final CompilationUnit unit = astUtils.createCompilationUnit(sourceType.getCompilationUnit(), null);
final MethodDeclaration methodDecl = astUtils.getMethodDeclaration(varargMethod, (TypeDeclaration) astUtils.getTypeDeclaration("Test", unit));
assertEquals("One parameter expected", 1, methodDecl.parameters().size());
return astUtils.getTypeSignature((SingleVariableDeclaration) methodDecl.parameters().iterator().next());
}
private File createTempJavaFile() throws Exception
{
File dir = TestFileUtils.createTempDirectory("" + System.currentTimeMillis());
File tempClassFile = new File(dir, "Test.java");
FileWriter fw = new FileWriter(tempClassFile);
fw.write("package " + PCK + ";\n" + SRC);
fw.close();
return tempClassFile;
}
}