/*******************************************************************************
* 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.grails.ide.eclipse.test;
import junit.framework.Test;
import org.codehaus.jdt.groovy.model.GroovyCompilationUnit;
import org.grails.ide.eclipse.core.internal.plugins.GrailsCore;
import org.grails.ide.eclipse.editor.groovy.elements.GrailsWorkspaceCore;
import org.grails.ide.eclipse.editor.groovy.elements.INavigableGrailsElement;
/**
* @author Andrew Eisenberg
* @author Nieraj Singh
* @created Jan 19, 2010
*/
public class GrailsCoreTests extends AbstractGrailsCoreTests {
public static Test suite() {
return buildTestSuite(GrailsCoreTests.class);
}
public GrailsCoreTests(String name) {
super(name);
}
public void testProjectInfo() throws Exception {
MockProjectInfo info = GrailsCore.get().connect(testProject.getProject(), MockProjectInfo.class);
MockProjectInfo info2 = GrailsCore.get().connect(testProject.getProject(), MockProjectInfo.class);
assertEquals("Project infos should not be recreated for same project", info, info2);
MockProjectInfo2 info3 = GrailsCore.get().connect(testProject.getProject(), MockProjectInfo2.class);
MockProjectInfo2 info4 = GrailsCore.get().connect(testProject.getProject(), MockProjectInfo2.class);
assertEquals("Project infos should not be recreated for same project", info3, info4);
GrailsCore.get().getInfo(testProject.getProject(), MockProjectInfo2.class).dispose();
info4 = GrailsCore.get().connect(testProject.getProject(), MockProjectInfo2.class);
assertEquals("Project infos should not be recreated for same project", info3, info4);
// initial setting of the project
assertEquals(1, info.setProjectCount);
// nothing else should have been called
assertEquals(0, info.disposeCount);
assertEquals(0, info.projectChangedCount);
// a resource change should bump up the affected count
testProject.getProject().getFile(".classpath").touch(null);
assertEquals(1, info.projectChangedCount);
// closing should dispose
testProject.getProject().close(null);
assertEquals(1, info.disposeCount);
assertEquals(1, info.projectChangedCount);
// after re-opening, should not be connected any more
testProject.getProject().open(null);
testProject.getProject().getFile(".classpath");
assertEquals(1, info.disposeCount);
assertEquals(1, info.projectChangedCount);
assertEquals(1, info.setProjectCount);
info2 = GrailsCore.get().connect(testProject.getProject(), MockProjectInfo.class);
assertNotSame("Project infos should be different after closing and reopening a project", info, info2);
}
public void testDomainClass() throws Exception {
GroovyCompilationUnit unit = createDomainClass("Foo.groovy", "class Foo { }");
assertDomainClass(unit);
}
public void testControllerClass() throws Exception {
GroovyCompilationUnit unit = createControllerClass("FooController.groovy", "class FooController { }");
assertControllerClass(unit);
}
public void testTaglibClass() throws Exception {
GroovyCompilationUnit unit = createTaglibClass("FooTagLib.groovy", "class FooTagLib { }");
assertTagLibClass(unit);
}
public void testServiceClass() throws Exception {
GroovyCompilationUnit unit = createServiceClass("FooService.groovy", "class FooService { }");
assertServiceClass(unit);
}
public void testDomainClassNavigation() throws Exception {
GroovyCompilationUnit dunit = createDomainClass("Foo.groovy", "class Foo { }");
assertFalse(GrailsWorkspaceCore.hasRelatedDomainClass(dunit));
assertTrue(GrailsWorkspaceCore.hasRelatedControllerClass(dunit));
assertTrue(GrailsWorkspaceCore.hasRelatedServiceClass(dunit));
assertTrue(GrailsWorkspaceCore.hasRelatedTagLibClass(dunit));
INavigableGrailsElement elt = GrailsWorkspaceCore.get().getGrailsProjectFor(dunit).getDomainClass(dunit);
assertNull(elt.getControllerClass());
assertEquals(dunit, elt.getDomainClass().getCompilationUnit());
assertNull(elt.getServiceClass());
assertNull(elt.getTagLibClass());
GroovyCompilationUnit cunit = createControllerClass("FooController.groovy", "class FooController { }");
GroovyCompilationUnit tunit = createTaglibClass("FooTagLib.groovy", "class FooTagLib { }");
GroovyCompilationUnit sunit = createServiceClass("FooService.groovy", "class FooService { }");
assertEquals(dunit, elt.getDomainClass().getCompilationUnit());
assertEquals(cunit, elt.getControllerClass().getCompilationUnit());
assertEquals(tunit, elt.getTagLibClass().getCompilationUnit());
assertEquals(sunit, elt.getServiceClass().getCompilationUnit());
}
public void testControllerClassNavigation() throws Exception {
GroovyCompilationUnit cunit = createControllerClass("FooController.groovy", "class FooController { }");
assertTrue(GrailsWorkspaceCore.hasRelatedDomainClass(cunit));
assertFalse(GrailsWorkspaceCore.hasRelatedControllerClass(cunit));
assertTrue(GrailsWorkspaceCore.hasRelatedServiceClass(cunit));
assertTrue(GrailsWorkspaceCore.hasRelatedTagLibClass(cunit));
INavigableGrailsElement elt = GrailsWorkspaceCore.get().getGrailsProjectFor(cunit).getControllerClass(cunit);
assertEquals(cunit, elt.getControllerClass().getCompilationUnit());
assertNull(elt.getDomainClass());
assertNull(elt.getServiceClass());
assertNull(elt.getTagLibClass());
GroovyCompilationUnit dunit = createDomainClass("Foo.groovy", "class Foo { }");
GroovyCompilationUnit tunit = createTaglibClass("FooTagLib.groovy", "class FooTagLib { }");
GroovyCompilationUnit sunit = createServiceClass("FooService.groovy", "class FooService { }");
assertEquals(dunit, elt.getDomainClass().getCompilationUnit());
assertEquals(cunit, elt.getControllerClass().getCompilationUnit());
assertEquals(tunit, elt.getTagLibClass().getCompilationUnit());
assertEquals(sunit, elt.getServiceClass().getCompilationUnit());
}
public void testTagLibNavigation() throws Exception {
GroovyCompilationUnit tunit = createTaglibClass("FooTagLib.groovy", "class FooTagLib { }");
assertTrue(GrailsWorkspaceCore.hasRelatedDomainClass(tunit));
assertTrue(GrailsWorkspaceCore.hasRelatedControllerClass(tunit));
assertTrue(GrailsWorkspaceCore.hasRelatedServiceClass(tunit));
assertFalse(GrailsWorkspaceCore.hasRelatedTagLibClass(tunit));
INavigableGrailsElement elt = GrailsWorkspaceCore.get().getGrailsProjectFor(tunit).getTagLibClass(tunit);
assertEquals(tunit, elt.getTagLibClass().getCompilationUnit());
assertNull(elt.getDomainClass());
assertNull(elt.getServiceClass());
assertNull(elt.getControllerClass());
GroovyCompilationUnit dunit = createDomainClass("Foo.groovy", "class Foo { }");
GroovyCompilationUnit cunit = createControllerClass("FooController.groovy", "class FooController { }");
GroovyCompilationUnit sunit = createServiceClass("FooService.groovy", "class FooService { }");
assertEquals(dunit, elt.getDomainClass().getCompilationUnit());
assertEquals(cunit, elt.getControllerClass().getCompilationUnit());
assertEquals(tunit, elt.getTagLibClass().getCompilationUnit());
assertEquals(sunit, elt.getServiceClass().getCompilationUnit());
}
public void testServicesNavigation() throws Exception {
GroovyCompilationUnit sunit = createServiceClass("FooService.groovy", "class FooService { }");
assertTrue(GrailsWorkspaceCore.hasRelatedDomainClass(sunit));
assertTrue(GrailsWorkspaceCore.hasRelatedControllerClass(sunit));
assertFalse(GrailsWorkspaceCore.hasRelatedServiceClass(sunit));
assertTrue(GrailsWorkspaceCore.hasRelatedTagLibClass(sunit));
INavigableGrailsElement elt = GrailsWorkspaceCore.get().getGrailsProjectFor(sunit).getServiceClass(sunit);
assertEquals(sunit, elt.getServiceClass().getCompilationUnit());
assertNull(elt.getDomainClass());
assertNull(elt.getTagLibClass());
assertNull(elt.getControllerClass());
GroovyCompilationUnit dunit = createDomainClass("Foo.groovy", "class Foo { }");
GroovyCompilationUnit cunit = createControllerClass("FooController.groovy", "class FooController { }");
GroovyCompilationUnit tunit = createTaglibClass("FooTagLib.groovy", "class FooTagLib { }");
assertEquals(dunit, elt.getDomainClass().getCompilationUnit());
assertEquals(cunit, elt.getControllerClass().getCompilationUnit());
assertEquals(tunit, elt.getTagLibClass().getCompilationUnit());
assertEquals(sunit, elt.getServiceClass().getCompilationUnit());
}
}