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