package org.eclipse.jst.j2ee.common.test;

import junit.framework.TestCase;

import org.eclipse.jst.j2ee.common.CommonFactory;
import org.eclipse.jst.j2ee.common.CompatibilityDescriptionGroup;

public class CompatibilityDescriptionGroupTest extends TestCase {

	private CompatibilityDescriptionGroup getInstance() {
		return CommonFactory.eINSTANCE.createCompatibilityDescriptionGroup();
	}
	
  /*  public void test_getSmallIcon() {
        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup = getInstance();
        String retValue = "";
        retValue = objCompatibilityDescriptionGroup.getSmallIcon();
    }

    public void test_setSmallIcon() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String newSmallIcon = "";
        objCompatibilityDescriptionGroup.setSmallIcon(newSmallIcon);
    } */

   /* public void test_setSmallIconGen() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String newSmallIcon = "";
        objCompatibilityDescriptionGroup.setSmallIconGen(newSmallIcon);
    }*/

  /*  public void test_getLargeIcon() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String retValue = "";
        retValue = objCompatibilityDescriptionGroup.getLargeIcon();
    }

    public void test_setLargeIcon() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String newLargeIcon = "";
        objCompatibilityDescriptionGroup.setLargeIcon(newLargeIcon);
    } */

   /*public void test_setLargeIconGen() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String newLargeIcon = "";
        objCompatibilityDescriptionGroup.setLargeIconGen(newLargeIcon);
    }*/

   /* public void test_getDescription() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String retValue = "";
        retValue = objCompatibilityDescriptionGroup.getDescription();
    }

    public void test_setDescription() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String newDescription = "";
        objCompatibilityDescriptionGroup.setDescription(newDescription);
    }
*/
   
   /* public void test_setDescriptionGen() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String newDescription = "";
        objCompatibilityDescriptionGroup.setDescriptionGen(newDescription);
    }*/

    /* public void test_getDisplayName() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String retValue = "";
        retValue = objCompatibilityDescriptionGroup.getDisplayName();
    }

    public void test_setDisplayName() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String newDisplayName = "";
        objCompatibilityDescriptionGroup.setDisplayName(newDisplayName);
    }*/

   /*public void test_setDisplayNameGen() {

        CompatibilityDescriptionGroup objCompatibilityDescriptionGroup =  getInstance();
        String newDisplayName = "";
        objCompatibilityDescriptionGroup.setDisplayNameGen(newDisplayName);
    }*/

   
}
