2 * Copyright 2008 the original author or authors.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0 s
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.codehaus
.groovy
.grails
.plugins
.web
.filters
19 * Test case for {@link FilterConfig}.
23 class FilterConfigTests
extends GroovyTestCase
{
24 private static final int INT_PROP_VALUE
= 1000
25 private static final String STRING_PROP_VALUE
= 'Test property'
27 void testPropertyMissing() {
28 def mockDefinition
= new MockFiltersDefinition()
29 def testFilterConfig
= new FilterConfig(name
: 'Test filter', initialised
: true, filtersDefinition
: mockDefinition
)
31 // Try property 1 to start with.
32 assert testFilterConfig
.propOne
== INT_PROP_VALUE
34 // Now try it a couple more times to make sure that the metaclass
35 // property has been registered correctly.
36 assert testFilterConfig
.propOne
== INT_PROP_VALUE
37 assert testFilterConfig
.propOne
== INT_PROP_VALUE
39 // Now try with number 2.
40 assert testFilterConfig
.prop2
== STRING_PROP_VALUE
41 assert testFilterConfig
.prop2
== STRING_PROP_VALUE
42 assert testFilterConfig
.prop2
== STRING_PROP_VALUE
44 // And now make sure we can still access property 1.
45 assert testFilterConfig
.propOne
== INT_PROP_VALUE
47 // Any other property access should result in this exception.
48 shouldFail(MissingPropertyException
) {
49 testFilterConfig
.unknownProperty
53 void testMethodMissing() {
54 def mockDefinition
= new MockFiltersDefinition()
55 def testFilterConfig
= new FilterConfig(name
: 'Test filter', initialised
: true, filtersDefinition
: mockDefinition
)
57 // Try the 'run' method first.
58 testFilterConfig
.run()
59 assert mockDefinition
.runCalled
61 // Now try it a couple more times to make sure that the metaclass
62 // method has been registered correctly.
63 mockDefinition
.reset()
64 testFilterConfig
.run()
65 assert mockDefinition
.runCalled
67 mockDefinition
.reset()
68 testFilterConfig
.run()
69 assert mockDefinition
.runCalled
71 // Now try with the next method.
72 mockDefinition
.reset()
73 mockDefinition
.returnValue
= 6342
74 assert testFilterConfig
.generateNumber() == 6342
75 assert mockDefinition
.generateNumberCalled
== true
77 mockDefinition
.reset()
78 mockDefinition
.returnValue
= '101'
79 assert testFilterConfig
.generateNumber() == '101'
80 assert mockDefinition
.generateNumberCalled
== true
82 mockDefinition
.reset()
83 mockDefinition
.returnValue
= 10.232
84 assert testFilterConfig
.generateNumber() == 10.232
85 assert mockDefinition
.generateNumberCalled
== true
87 // Now for a method with arguments.
88 mockDefinition
.reset()
89 mockDefinition
.expectedStringArg
= 'Test'
90 mockDefinition
.expectedIntArg
= 1000
91 testFilterConfig
.checkArgs('Test', 1000)
92 assert mockDefinition
.checkArgsCalled
94 mockDefinition
.reset()
95 mockDefinition
.expectedStringArg
= 'Test two'
96 mockDefinition
.expectedIntArg
= 2000
97 testFilterConfig
.checkArgs('Test two', 2000)
98 assert mockDefinition
.checkArgsCalled
100 mockDefinition
.reset()
101 mockDefinition
.expectedStringArg
= 'Apples'
102 mockDefinition
.expectedIntArg
= -3423
103 testFilterConfig
.checkArgs('Apples', -3423)
104 assert mockDefinition
.checkArgsCalled
106 // A method that takes a list as an argument.
107 mockDefinition
.reset()
108 assert testFilterConfig
.sum([1, 2, 3, 4]) == 10
109 assert mockDefinition
.sumCalled
111 mockDefinition
.reset()
112 assert testFilterConfig
.sum([4, 5, 1, 10]) == 20
113 assert mockDefinition
.sumCalled
115 mockDefinition
.reset()
116 assert testFilterConfig
.sum([12, 26, 3, 41]) == 82
117 assert mockDefinition
.sumCalled
119 // And now make sure the 'run' method is still available.
120 mockDefinition
.reset()
121 testFilterConfig
.run()
122 assert mockDefinition
.runCalled
124 // Any other property access should result in this exception.
125 shouldFail(MissingMethodException
) {
126 testFilterConfig
.unknownMethod(23)
131 class MockFiltersDefinition
{
133 def prop2
= 'Test property'
135 def generateNumberCalled
138 def expectedStringArg
142 MockFiltersDefinition() {
150 def
generateNumber() {
151 generateNumberCalled
= true
155 void checkArgs(String arg1
, int arg2
) {
156 checkArgsCalled
= true
157 assert arg1
== expectedStringArg
158 assert arg2
== expectedIntArg
168 generateNumberCalled
= false
169 checkArgsCalled
= false
171 expectedStringArg
= null
172 expectedIntArg
= null