1 package org
.codehaus
.groovy
.grails
.web
.mapping
3 import org
.springframework
.core
.io
.*
5 class UrlMappingEvaluatorTests
extends GroovyTestCase
{
7 def mappingScript
= '''
9 "/$id/$year?/$month?/$day?" {
13 year(matches:/\\d{4}/)
14 month(matches:/\\d{2}/)
19 controller = "product"
22 "/book/$author/$title/$test" {
26 "/author/$lastName/$firstName" (controller:'author
', action:'show
') {
33 "/music/$band/$album" (controller:'music
', action:'show
')
37 void testEvaluateMappings() {
38 def res
= new ByteArrayResource(mappingScript
.bytes
)
40 def evaluator
= new DefaultUrlMappingEvaluator()
41 def mappings
= evaluator
.evaluateMappings(res
)
44 assertEquals
5, mappings
.size()
47 assertEquals
"/(*)/(*)?/(*)?/(*)?", m1
.urlData
.urlPattern
48 assertEquals
4, m1
.urlData
.tokens
.size()
51 def info
= m1
.match("/myentry/2007/04/28")
53 assertEquals
"myentry", info
.id
54 assertEquals
"2007", info
.parameters
.year
55 assertEquals
"04", info
.parameters
.month
56 assertEquals
"28", info
.parameters
.day
57 assertEquals
"blog", info
.controllerName
58 assertEquals
"show", info
.actionName
61 assert m1
.match("/myentry/2007/04/28")
62 assert m1
.match("/myentry/2007/04")
63 assert m1
.match("/myentry/2007")
64 assert m1
.match("/myentry")
69 info
= m2
.match("/product/MacBook")
71 assertEquals
"MacBook", info
.parameters
.name
73 assert !m2
.match("/product")
74 assert !m2
.match("/foo/bar")
75 assert !m2
.match("/product/MacBook/foo")
78 info
= m4
.match("/author/Brown/Jeff")
80 assertEquals
"Brown", info
.parameters
.lastName
81 assertEquals
"Jeff", info
.parameters
.firstName
82 assertEquals
"show", info
.actionName
83 assertEquals
"author", info
.controllerName
85 // first name too long
86 assert !m4
.match("/author/Lang/Johnny")
88 // both names too long
89 assert !m4
.match("/author/Winter/Johnny")
92 assert !m4
.match("/author/Winter/Edgar")
95 info
= m5
.match("/music/Rush/Hemispheres")
97 assertEquals
"Rush", info
.parameters
.band
98 assertEquals
"Hemispheres", info
.parameters
.album
99 assertEquals
"show", info
.actionName
100 assertEquals
"music", info
.controllerName