package com.opcoach.genmodeladdon.core.test; import static org.junit.Assert.assertEquals; import org.eclipse.emf.codegen.ecore.genmodel.GenClass; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; import org.junit.Test; import com.opcoach.genmodeladdon.core.GenerateDevStructure; public class TestInterfaceGeneration extends GenModelAddonTestCase { private String copyright = "OPCoach 2016"; // ---------------------------------------------------------------------------------------------------------- // ------------------- Test dev interfaces extends gen interfaces or parent // dev interface ------------------ // ---------------------------------------------------------------------------------------------------------- @Test public void interfaceProjectMustExtendsMProject() { assertFileContains("src/com/opcoach/project/Project.java", "interface Project extends MProject"); } @Test public void interfaceTaskMustExtendsMTask() { assertFileContains("src/com/opcoach/project/Task.java", "interface Task extends MTask"); } @Test public void interfaceCompanyMustExtendsMCompany() { assertFileContains("src/com/opcoach/project/Company.java", "interface Company extends MCompany"); } @Test public void interfacePersonMustExtendsMPerson() { assertFileContains("src/com/opcoach/project/Person.java", "interface Person extends MPerson"); } @Test public void interfaceMDocumentationProjectMustExtendsProject() { assertFileContains("src-gen/com/opcoach/project/documentation/MDocumentationProject.java", "interface MDocumentationProject extends Project"); } @Test public void interfaceDocumentationProjectMustExtendsMDocumentationProject() { assertFileContains("src/com/opcoach/project/documentation/DocumentationProject.java", "interface DocumentationProject extends MDocumentationProject"); } // ---------------------------------------------------------------------------------------------------------- // ------------------- Test dev implementations extends gen implementations // or parent dev implementations -- // ---------------------------------------------------------------------------------------------------------- @Test public void implCompanyMustExtendMCompanyImplAndImplementsCompany() { assertFileContains("src/com/opcoach/project/impl/CompanyImpl.java", "class CompanyImpl extends MCompanyImpl implements Company"); } @Test public void implTaskMustExtendMTaskImplAndImplementsTask() { assertFileContains("src/com/opcoach/project/impl/TaskImpl.java", "class TaskImpl extends MTaskImpl implements Task"); } @Test public void implPersonMustExtendMPersonImplAndImplementsPerson() { assertFileContains("src/com/opcoach/project/impl/PersonImpl.java", "class PersonImpl extends MPersonImpl implements Person"); } @Test public void implProjectMustExtendMProjectImpAndImplementsProject() { assertFileContains("src/com/opcoach/project/impl/ProjectImpl.java", "class ProjectImpl extends MProjectImpl implements Project"); } @Test public void implDocProjectMustExtendMDocProjectImpAndImplementsDocProject() { assertFileContains("src/com/opcoach/project/documentation/impl/DocumentationProjectImpl.java", "class DocumentationProjectImpl extends MDocumentationProjectImpl implements DocumentationProject"); } @Test public void implDocTaskMustExtendMDocTaskImpAndImplementsDocTask() { assertFileContains("src/com/opcoach/project/documentation/impl/DocumentationTaskImpl.java", "class DocumentationTaskImpl extends MDocumentationTaskImpl implements DocumentationTask"); } // ---------------------------------------------------------------------------------------------------------- // ------------------- Test gen implementations extends gen implementations // or parent dev implementations -- // ---------------------------------------------------------------------------------------------------------- @Test public void implMDocProjectImplMustExtendProjectImplAndImplementsMDocProject() { assertFileContains("src-gen/com/opcoach/project/documentation/impl/MDocumentationProjectImpl.java", "class MDocumentationProjectImpl extends ProjectImpl implements DocumentationProject"); } // ----------------------------------------------------------------- // ------------------- Test composition getters ------------------ // ----------------------------------------------------------------- @Test public void getTaskOnGenProjectInterfaceMustReturnListOfTask() { assertFileContains("src-gen/com/opcoach/project/MProject.java", "EList<Task> getTasks();"); } @Test public void getMainTaskOnGenProjectInterfaceMustReturnTask() { assertFileContains("src-gen/com/opcoach/project/MProject.java", "Task getMainTask();"); assertFileContains("src-gen/com/opcoach/project/MProject.java", "void setMainTask(Task value);"); } @Test public void getMainTaskOnGenProjectClassMustReturnTask() { assertFileContains("src-gen/com/opcoach/project/impl/MProjectImpl.java", "protected Task mainTask;"); assertFileContains("src-gen/com/opcoach/project/impl/MProjectImpl.java", "public Task getMainTask()"); assertFileContains("src-gen/com/opcoach/project/impl/MProjectImpl.java", "public void setMainTask(Task newMainTask)"); } @Test public void getProjectOnCompanyMustReturnListOfProjects() { assertFileContains("src-gen/com/opcoach/project/MCompany.java", "EList<Project> getProjects();"); } @Test public void getEmployeesOnCompanyMustReturnListOfPerson() { assertFileContains("src-gen/com/opcoach/project/MCompany.java", "EList<Person> getEmployees();"); } // ----------------------------------------------------------------- // ------------------- Test factory API ------------------ // ----------------------------------------------------------------- @Test public void theProjectFactoryMustExtendsMProjectFactory() { assertFileContains("src/com/opcoach/project/ProjectFactory.java", "public interface ProjectFactory extends MProjectFactory"); } @Test public void theProjectFactoryMustCreatePerson() { assertFileContains("src/com/opcoach/project/ProjectFactory.java", "public Person createPerson();"); assertFileContains("src/com/opcoach/project/impl/ProjectFactoryImpl.java", "new PersonImpl();"); } @Test public void theProjectFactoryMustCreateProject() { assertFileContains("src/com/opcoach/project/ProjectFactory.java", "public Project createProject()"); assertFileContains("src/com/opcoach/project/impl/ProjectFactoryImpl.java", "new ProjectImpl();"); } @Test public void theProjectFactoryMustCreateTask() { assertFileContains("src/com/opcoach/project/ProjectFactory.java", "public Task createTask();"); assertFileContains("src/com/opcoach/project/impl/ProjectFactoryImpl.java", "new TaskImpl();"); } @Test public void theProjectFactoryMustCreateCompany() { assertFileContains("src/com/opcoach/project/ProjectFactory.java", "public Company createCompany();"); assertFileContains("src/com/opcoach/project/impl/ProjectFactoryImpl.java", "new CompanyImpl();"); } @Test public void filesMustContainCopyright() { assertFileContains("src/com/opcoach/project/Project.java", copyright); assertFileContains("src/com/opcoach/project/ProjectFactory.java", copyright); assertFileContains("src/com/opcoach/project/ProjectPackage.java", copyright); assertFileContains("src/com/opcoach/project/impl/ProjectImpl.java", copyright); assertFileContains("src/com/opcoach/project/impl/ProjectFactoryImpl.java", copyright); } // ----------------------------------------------------------------------- // ------------------- Test gen operations must return the dev types -- // ----------------------------------------------------------------------- @Test public void theFindTaskMethodMustReturnTask() { assertFileContains("src-gen/com/opcoach/project/MProject.java", "Task findFirstTask"); assertFileContains("src-gen/com/opcoach/project/impl/MProjectImpl.java", "public Task findFirstTask"); } @Test public void theFindTaskMethodMustReceiveAPerson() { assertFileContains("src-gen/com/opcoach/project/MProject.java", "findFirstTask(Person p);"); assertFileContains("src-gen/com/opcoach/project/impl/MProjectImpl.java", "findFirstTask(Person p)"); assertFileContains("src-gen/com/opcoach/project/impl/MProjectImpl.java", "return findFirstTask((Person)arguments.get(0))"); } // ----------------------------------------------------------------------- // ------------------- EClass defined as interface -- // ----------------------------------------------------------------------- @Test public void anEclassAsInterfaceMustNotGenerateImplementation() { assertFileExists("src/com/opcoach/project/ClassAsInterface.java"); assertFileNotExists("src/com/opcoach/project/impl/ClassAsInterfaceImpl.java"); } // ----------------------------------------------------------------------- // ------------------- Enum type must be cast in the eSet method - // ----------------------------------------------------------------------- @Test public void enumTypeMustBeCastInESetMethod() { assertFileContains("src-gen/com/opcoach/project/impl/MPersonImpl.java", "setType((TypePerson)newValue);"); assertFileContains("src-gen/com/opcoach/project/impl/MProjectImpl.java", "setType((TypeProject)newValue);"); } }