1 package org.codehaus.groovy.grails.web.servlet; 2 3 import groovy.lang.GroovyClassLoader; 4 import groovy.lang.GroovyObject; 5 import junit.framework.TestCase; 6 7 import org.codehaus.groovy.grails.commons.ControllerArtefactHandler; 8 import org.codehaus.groovy.grails.commons.DefaultGrailsApplication; 9 import org.codehaus.groovy.grails.commons.GrailsApplication; 10 import org.codehaus.groovy.grails.commons.GrailsClass; 11 import org.codehaus.groovy.grails.commons.TagLibArtefactHandler; 12 import org.codehaus.groovy.grails.support.MockApplicationContext; 13 import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods; 14 import org.springframework.mock.web.MockHttpServletRequest; 15 import org.springframework.mock.web.MockHttpServletResponse; 16 import org.springframework.mock.web.MockServletContext; 17 18 public class GrailsApplicationAttributesTests extends TestCase { 19 20 /* 21 * Test method for 'org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes.getTemplateUri(String, ServletRequest)' 22 */ testGetTemplateUri()23 public void testGetTemplateUri() { 24 GrailsApplicationAttributes attrs = new DefaultGrailsApplicationAttributes(new MockServletContext()); 25 26 assertEquals("/_test.gsp",attrs.getTemplateUri("/test", new MockHttpServletRequest())); 27 assertEquals("/shared/_test.gsp",attrs.getTemplateUri("/shared/test", new MockHttpServletRequest())); 28 } 29 30 /* 31 * Test method for 'org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes.getViewUri(String, ServletRequest)' 32 */ testGetViewUri()33 public void testGetViewUri() throws Exception { 34 GrailsApplicationAttributes attrs = new DefaultGrailsApplicationAttributes(new MockServletContext()); 35 GroovyClassLoader gcl = new GroovyClassLoader(); 36 Class<?> controllerClass = gcl.parseClass( "class TestController {\n" + 37 "def "+ControllerDynamicMethods.CONTROLLER_URI_PROPERTY+" = '/test'\n" + 38 "def "+ControllerDynamicMethods.CONTROLLER_NAME_PROPERTY+" = 'test'\n" + 39 "}" ); 40 41 MockHttpServletRequest request = new MockHttpServletRequest(); 42 request.setAttribute(GrailsApplicationAttributes.CONTROLLER, controllerClass.newInstance()); 43 44 assertEquals("/WEB-INF/grails-app/views/test/aView.gsp",attrs.getViewUri("aView", request)); 45 assertEquals("/WEB-INF/grails-app/views/shared.gsp",attrs.getViewUri("/shared", request)); 46 } 47 testGetTagLibForTag()48 public void testGetTagLibForTag() throws Exception { 49 GroovyClassLoader gcl = new GroovyClassLoader(); 50 gcl.parseClass( "class TestController {\n" + 51 "def list = {\n" + 52 "}\n" + 53 "}\n" + 54 "class FirstTagLib {\n" + 55 "def firstTag = {\n" + 56 "}\n" + 57 "}\n" + 58 "class SecondTagLib {\n" + 59 "def secondTag = {\n" + 60 "}\n" + 61 "}" ); 62 63 GrailsApplicationAttributes attrs = getAttributesForClasses(gcl.getLoadedClasses(),gcl); 64 assertNotNull(attrs); 65 assertNotNull(attrs.getApplicationContext()); 66 assertNotNull(attrs.getGrailsApplication()); 67 68 MockHttpServletRequest request = new MockHttpServletRequest(); 69 MockHttpServletResponse response = new MockHttpServletResponse(); 70 GroovyObject controller = (GroovyObject)attrs.getApplicationContext().getBean("TestController"); 71 request.setAttribute(GrailsApplicationAttributes.CONTROLLER,controller ); 72 GroovyObject tagLib1 = attrs.getTagLibraryForTag(request,response,"firstTag"); 73 assertNotNull(tagLib1); 74 } 75 getAttributesForClasses(Class<?>[] classes, GroovyClassLoader gcl)76 private GrailsApplicationAttributes getAttributesForClasses(Class<?>[] classes, GroovyClassLoader gcl) { 77 MockApplicationContext context = new MockApplicationContext(); 78 MockServletContext servletContext = new MockServletContext(); 79 servletContext.setAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT,context); 80 81 GrailsApplication app = new DefaultGrailsApplication(classes,gcl); 82 app.initialise(); 83 context.registerMockBean(GrailsApplication.APPLICATION_ID,app); 84 85 GrailsClass[] controllers = app.getArtefacts(ControllerArtefactHandler.TYPE); 86 for (int i = 0; i < controllers.length; i++) { 87 context.registerMockBean(controllers[i].getFullName(), controllers[i].newInstance()); 88 } 89 90 GrailsClass[] taglibs = app.getArtefacts(TagLibArtefactHandler.TYPE); 91 for (int i = 0; i < taglibs.length; i++) { 92 context.registerMockBean(taglibs[i].getFullName(), taglibs[i].newInstance()); 93 } 94 return new DefaultGrailsApplicationAttributes(servletContext); 95 } 96 } 97