package org.grails.io.support; import junit.framework.TestCase; import org.grails.io.support.GrailsResourceUtils; import org.grails.io.support.Resource; import org.grails.io.support.UrlResource; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockServletContext; import java.io.File; import java.net.MalformedURLException; import java.net.URL; public class GrailsResourceUtilsTests extends TestCase { private static final String TEST_URL = "file:///test/grails/app/grails-app/domain/Test.groovy"; private static final String TEST_PACKAGE_URL = "file:///test/grails/app/grails-app/domain/mycompany/Test.groovy"; private static final String TEST_CONTROLLER_URL = "file:///test/grails/app/grails-app/controllers/TestController.groovy"; private static final String TEST_PLUGIN_CTRL = "file:///test/grails/app/plugins/myplugin/grails-app/controllers/TestController.groovy"; private static final String WEBINF_CONTROLLER = "file:///test/grails/app/WEB-INF/grails-app/controllers/TestController.groovy"; private static final String WEBINF_PLUGIN_CTRL = "file:///test/grails/app/WEB-INF/plugins/myplugin/grails-app/controllers/TestController.groovy"; private static final String UNIT_TESTS_URL = "file:///test/grails/app/grails-tests/SomeTests.groovy"; public void testGetArtifactDirectory() { assertEquals("controllers", GrailsResourceUtils.getArtefactDirectory(TEST_CONTROLLER_URL)); assertEquals("domain", GrailsResourceUtils.getArtefactDirectory(TEST_PACKAGE_URL)); } public void testJavaAndGroovySources() { assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(TEST_PACKAGE_URL)); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/domain/mycompany/Test.java").getPath())); assertEquals("Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/blahblah/Test.java").getPath())); assertEquals("Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/blah-blah/Test.java").getPath())); assertEquals("Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/blah--blah/Test.java").getPath())); assertEquals("Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/blah_blah/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/blahblah/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/blah-blah/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/blah--blah/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/grails-app/blah_blah/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/main/groovy/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/test/groovy/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/main/java/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/test/java/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/main/groovy/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/test/groovy/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/main/java/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/test/java/mycompany/Test.java").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/main/groovy/mycompany/Test.groovy").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/test/groovy/mycompany/Test.groovy").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/main/java/mycompany/Test.groovy").getPath())); assertEquals("mycompany.Test", GrailsResourceUtils.getClassName(new File("/test/grails/app/src/test/java/mycompany/Test.groovy").getPath())); } public void testIsDomainClass() throws Exception { URL testUrl = new URL(TEST_URL); assertTrue(GrailsResourceUtils.isDomainClass(testUrl)); } public void testGetPathFromRoot() throws Exception { assertEquals("mycompany/Test.groovy", GrailsResourceUtils.getPathFromRoot(TEST_PACKAGE_URL)); assertEquals("Test.groovy", GrailsResourceUtils.getPathFromRoot(TEST_URL)); } public void testGetClassNameResource() throws Exception { Resource r = new UrlResource(new URL(TEST_URL)); assertEquals("Test", GrailsResourceUtils.getClassName(r)); } public void testGetClassNameString() { assertEquals("Test", GrailsResourceUtils.getClassName(TEST_URL)); } public void testIsGrailsPath() { assertTrue(GrailsResourceUtils.isGrailsPath(TEST_URL)); } public void testIsTestPath() { assertTrue(GrailsResourceUtils.isGrailsPath(UNIT_TESTS_URL)); } public void testGetTestNameResource() throws Exception { Resource r = new UrlResource(new URL(UNIT_TESTS_URL)); assertEquals("SomeTests", GrailsResourceUtils.getClassName(r)); } public void testGetTestNameString() { assertEquals("SomeTests", GrailsResourceUtils.getClassName(UNIT_TESTS_URL)); } public void testGetViewsDirForURL() throws Exception { Resource viewsDir = GrailsResourceUtils.getViewsDir(new UrlResource(TEST_CONTROLLER_URL)); assertEquals(toFileUrl("/test/grails/app/grails-app/views"), viewsDir.getURL().toString()); viewsDir = GrailsResourceUtils.getViewsDir(new UrlResource(TEST_URL)); assertEquals(toFileUrl("/test/grails/app/grails-app/views"), viewsDir.getURL().toString()); } public void testGetAppDir() throws Exception { Resource appDir = GrailsResourceUtils.getAppDir(new UrlResource(TEST_CONTROLLER_URL)); assertEquals(toFileUrl("/test/grails/app/grails-app"), appDir.getURL().toString()); appDir = GrailsResourceUtils.getAppDir(new UrlResource(TEST_URL)); assertEquals(toFileUrl("/test/grails/app/grails-app"), appDir.getURL().toString()); } public void testGetDirWithinWebInf() throws Exception { Resource viewsDir = GrailsResourceUtils.getViewsDir(new UrlResource(TEST_CONTROLLER_URL)); Resource pluginViews = GrailsResourceUtils.getViewsDir(new UrlResource(TEST_PLUGIN_CTRL)); Resource webInfViews = GrailsResourceUtils.getViewsDir(new UrlResource(WEBINF_CONTROLLER)); Resource webInfPluginViews = GrailsResourceUtils.getViewsDir(new UrlResource(WEBINF_PLUGIN_CTRL)); assertEquals(toFileUrl("/test/grails/app/grails-app/views"), viewsDir.getURL().toString()); assertEquals(toFileUrl("/test/grails/app/plugins/myplugin/grails-app/views"), pluginViews.getURL().toString()); assertEquals(toFileUrl("/test/grails/app/WEB-INF/grails-app/views"), webInfViews.getURL().toString()); assertEquals(toFileUrl("/test/grails/app/WEB-INF/plugins/myplugin/grails-app/views"), webInfPluginViews.getURL().toString()); assertEquals("/WEB-INF/grails-app/views", GrailsResourceUtils.getRelativeInsideWebInf(webInfViews)); assertEquals("/WEB-INF/plugins/myplugin/grails-app/views", GrailsResourceUtils.getRelativeInsideWebInf(webInfPluginViews)); assertEquals("/WEB-INF/plugins/myplugin/grails-app/views", GrailsResourceUtils.getRelativeInsideWebInf(pluginViews)); assertEquals("/WEB-INF/grails-app/views", GrailsResourceUtils.getRelativeInsideWebInf(viewsDir)); } public void testGetPluginContextPath() throws Exception { MockServletContext servletContext = new MockServletContext("/myapp"); MockHttpServletRequest request = new MockHttpServletRequest(servletContext); request.setContextPath("/myapp"); assertEquals("", GrailsResourceUtils.getStaticResourcePathForResource(new UrlResource(TEST_CONTROLLER_URL), null)); assertEquals("plugins/myplugin", GrailsResourceUtils.getStaticResourcePathForResource( new UrlResource(TEST_PLUGIN_CTRL), null)); assertEquals("", GrailsResourceUtils.getStaticResourcePathForResource(new UrlResource(WEBINF_CONTROLLER), null)); assertEquals("plugins/myplugin", GrailsResourceUtils.getStaticResourcePathForResource( new UrlResource(WEBINF_PLUGIN_CTRL), null)); assertEquals("/myapp", GrailsResourceUtils.getStaticResourcePathForResource( new UrlResource(WEBINF_CONTROLLER), request.getContextPath())); assertEquals("/myapp/plugins/myplugin", GrailsResourceUtils.getStaticResourcePathForResource( new UrlResource(WEBINF_PLUGIN_CTRL), request.getContextPath())); } public void testAppendPiecesForUri() { assertEquals("", GrailsResourceUtils.appendPiecesForUri("")); assertEquals("/alpha/beta/gamma", GrailsResourceUtils.appendPiecesForUri("/alpha", "/beta", "/gamma")); assertEquals("/alpha/beta/gamma", GrailsResourceUtils.appendPiecesForUri("/alpha/", "/beta/", "/gamma")); assertEquals("/alpha/beta/gamma/", GrailsResourceUtils.appendPiecesForUri("/alpha/", "/beta/", "/gamma/")); assertEquals("alpha/beta/gamma", GrailsResourceUtils.appendPiecesForUri("alpha", "beta", "gamma")); } private String toFileUrl(String path) { if (path == null) return path; String url = null; try { url = new File(path).toURI().toURL().toString(); } catch (MalformedURLException e) { url = path; } return url; } }