Package org.springframework.ide.eclipse.quickfix.proposals.tests

Source Code of org.springframework.ide.eclipse.quickfix.proposals.tests.CreateNewClassQuickFixProposalTest

/*******************************************************************************
*  Copyright (c) 2012 VMware, Inc.
*  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:
*      VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.quickfix.proposals.tests;

import java.util.HashSet;
import java.util.Set;

import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
import org.eclipse.wst.xml.core.internal.document.AttrImpl;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.springframework.ide.eclipse.config.core.schemas.BeansSchemaConstants;
import org.springframework.ide.eclipse.core.java.Introspector;
import org.springframework.ide.eclipse.core.java.JdtUtils;
import org.springframework.ide.eclipse.quickfix.proposals.CreateNewClassQuickFixProposal;
import org.springframework.ide.eclipse.quickfix.tests.QuickfixTestUtil;


/**
* @author Terry Denney
* @author Leo Dos Santos
* @author Christian Dupuis
*/
@SuppressWarnings("restriction")
public class CreateNewClassQuickFixProposalTest extends AbstractBeanFileQuickfixTestCase {

  private IJavaProject javaProject;

  private void applyProposal(String beanName, String className, int constructorArgCount, Set<String> properties)
      throws Exception {
    IDOMNode beanNode = QuickfixTestUtil.getNode(BeansSchemaConstants.ELEM_BEAN, beanName, beansNode
        .getChildNodes());
    AttrImpl classAttr = (AttrImpl) beanNode.getAttributes().getNamedItem(BeansSchemaConstants.ATTR_CLASS);
    ITextRegion valueRegion = classAttr.getValueRegion();

    int offset = getOffset(valueRegion, beanNode);
    int length = getLength(valueRegion, false);

    CreateNewClassQuickFixProposal proposal = new CreateNewClassQuickFixProposal(offset, length, className, false,
        javaProject, properties, constructorArgCount, false);
    proposal.apply(document);
  }

  @Override
  protected void setUp() throws Exception {
    super.setUp();

    openBeanEditor("src/create-class-proposal.xml");
    javaProject = JavaCore.create(project);
  }

  public void testCreatingEnclosingClass() throws Exception {
    String className = "com.test.Account$Test";
    assertNull(className + " should not exist before applying proposal", JdtUtils.getJavaType(project, className));
    applyProposal("createClassTest10", className, 0, new HashSet<String>());

    assertNotNull("Expects " + className + " to be created", JdtUtils.getJavaType(project, className));
  }

  public void testWith1Property1ConstructorArg() throws Exception {
    String className = "com.test.Account5";
    Set<String> properties = new HashSet<String>();
    properties.add("creationDate");

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest5", className, 1, properties);

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 1 param to be created", Introspector.hasConstructor(type, 1, false));
    assertTrue("Expects writable property createDate to be created", Introspector.hasWritableProperty(type,
        "creationDate"));
  }

  public void testWith1Property2ConstructorArg() throws Exception {
    String className = "com.test.Account8";
    Set<String> properties = new HashSet<String>();
    properties.add("nickName");

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest8", className, 2, properties);

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 2 params to be created", Introspector.hasConstructor(type, 2, false));
    assertTrue("Expects writable property nickName to be created", Introspector.hasWritableProperty(type,
        "nickName"));
  }

  public void testWith1PropertyNoConstructorArg() throws Exception {
    String className = "com.test.Account2";
    Set<String> properties = new HashSet<String>();
    properties.add("name");

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest2", className, 0, properties);

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 0 param to be created", Introspector.hasConstructor(type, 0, false));
    assertTrue("Expects writable property name to be created", Introspector.hasWritableProperty(type, "name"));
  }

  public void testWith2Property1ConstructorArg() throws Exception {
    String className = "com.test.Account6";
    Set<String> properties = new HashSet<String>();
    properties.add("creationDate");
    properties.add("nickName");

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest6", className, 1, properties);

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 1 param to be created", Introspector.hasConstructor(type, 1, false));
    assertTrue("Expects writable property creationDate to be created", Introspector.hasWritableProperty(type,
        "creationDate"));
    assertTrue("Expects writable property nickName to be created", Introspector.hasWritableProperty(type,
        "nickName"));
  }

  public void testWith2Property2ConstructorArg() throws Exception {
    String className = "com.test.Account9";
    Set<String> properties = new HashSet<String>();
    properties.add("nickName");
    properties.add("expiryDate");

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest9", className, 2, properties);

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 2 params to be created", Introspector.hasConstructor(type, 2, false));
    assertTrue("Expects writable property nickName to be created", Introspector.hasWritableProperty(type,
        "nickName"));
    assertTrue("Expects writable property expiryDate to be created", Introspector.hasWritableProperty(type,
        "expiryDate"));
  }

  public void testWith2PropertyNoConstructorArg() throws Exception {
    String className = "com.test.Account3";
    Set<String> properties = new HashSet<String>();
    properties.add("name");
    properties.add("creationDate");

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest3", className, 0, properties);

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 0 param to be created", Introspector.hasConstructor(type, 0, false));
    assertTrue("Expects writable property name to be created", Introspector.hasWritableProperty(type, "name"));
    assertTrue("Expects writable property creationDate to be created", Introspector.hasWritableProperty(type,
        "creationDate"));
  }

  public void testWithNoProperty1ConstructorArg() throws Exception {
    String className = "com.test.Account4";

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest4", className, 1, new HashSet<String>());

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 1 param to be created", Introspector.hasConstructor(type, 1, false));
  }

  public void testWithNoProperty2ConstructorArg() throws Exception {
    String className = "com.test.Account7";

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest7", className, 2, new HashSet<String>());

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 2 params to be created", Introspector.hasConstructor(type, 2, false));
  }

  public void testWithNoPropertyNoConstructorArg() throws Exception {
    String className = "com.test.Account1";
    Set<String> properties = new HashSet<String>();

    assertNull(className + " should not exist before applying proposal", javaProject.findType(className));
    applyProposal("createClassTest1", className, 0, properties);

    IType type = javaProject.findType(className);

    assertNotNull("Expects " + className + " to be created", type);
    assertTrue("Expects constructor with 0 param to be created", Introspector.hasConstructor(type, 0, false));
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.quickfix.proposals.tests.CreateNewClassQuickFixProposalTest

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.