Skip to content

Commit b5ee5c0

Browse files
committed
GRAILS-5786 - Include actions defined in super classes in url mapping tests.
1 parent 81593f8 commit b5ee5c0

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/java/grails/test/GrailsUrlMappingsTestCase.groovy

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import org.springframework.web.servlet.DispatcherServlet
3333
import org.codehaus.groovy.grails.commons.GrailsControllerClass
3434
import org.springframework.web.context.ServletContextAware
3535
import javax.servlet.ServletContext
36+
import org.codehaus.groovy.grails.commons.GrailsClassUtils
37+
import org.springframework.beans.BeanUtils
3638

3739
/**
3840
* @author Luke Daley
@@ -89,8 +91,8 @@ class GrailsUrlMappingsTestCase extends GroovyTestCase {
8991

9092
def getActions(controller) {
9193
def instance = controllers[controller]
92-
instance.class.declaredFields.findAll {
93-
instance."${it.name}" instanceof Closure
94+
BeanUtils.getPropertyDescriptors(instance.class).findAll {
95+
GrailsClassUtils.getPropertyOrStaticPropertyOrFieldValue(instance, it.name) instanceof Closure
9496
}.collect {
9597
StringUtils.substringBeforeLast(it.name, "Flow")
9698
}

src/test/grails/test/GrailsUrlMappingsTestCaseTests.groovy

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ class GrailsUrlMappingsTestCaseTests extends GrailsUnitTestCase {
3131
super.setUp()
3232

3333
mockApplication = new DefaultGrailsApplication(
34-
[ GrailsUrlMappingsTestCaseFakeController, MoneyController, GRAILS_3571_UrlMappings, TestInternalUrlMappings, OverrideUrlMappings ] as Class[],
34+
[ GrailsUrlMappingsTestCaseFakeController, MoneyController, GRAILS_3571_UrlMappings, TestInternalUrlMappings, OverrideUrlMappings,
35+
GrailsUrlMappingTestCaseTestsBaseController, GrailsUrlMappingTestCaseTestsSubclassController
36+
] as Class[],
3537
new GroovyClassLoader(this.getClass().classLoader))
3638
mockApplication.initialise()
3739
mockApplication.config.disableMultipart = true
@@ -258,6 +260,13 @@ class GrailsUrlMappingsTestCaseTests extends GrailsUnitTestCase {
258260
}
259261
}
260262

263+
void testGrails5786() {
264+
def test = new Grails5786TestCase()
265+
test.grailsApplication = mockApplication
266+
test.setUp()
267+
test.testSuperClassMapping()
268+
}
269+
261270
private void checkFailures(TestResult result) {
262271
result.errors().each { TestFailure failure ->
263272
println ">> Error: ${failure.toString()}"
@@ -273,6 +282,12 @@ class GrailsUrlMappingsTestCaseTests extends GrailsUnitTestCase {
273282
}
274283
}
275284

285+
class Grails5786TestCase extends GrailsUrlMappingsTestCase {
286+
void testSuperClassMapping() {
287+
assertUrlMapping('/grailsUrlMappingTestCaseTestsSubclass/base', controller: 'grailsUrlMappingTestCaseTestsSubclass', action:'base')
288+
}
289+
}
290+
276291
class GRAILS_3571_UrlMappings {
277292
static mappings = {
278293
"/$controller/$action?/$id?"{
@@ -444,3 +459,9 @@ class MockUrlMapping implements UrlMapping {
444459
}
445460

446461
}
462+
463+
abstract class GrailsUrlMappingTestCaseTestsBaseController {
464+
def base = {}
465+
}
466+
467+
class GrailsUrlMappingTestCaseTestsSubclassController extends GrailsUrlMappingTestCaseTestsBaseController {}

0 commit comments

Comments
 (0)