001    // Copyright 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry.engine.encoders;
016    
017    import static org.easymock.EasyMock.expect;
018    
019    import org.apache.tapestry.BaseComponentTestCase;
020    import org.apache.tapestry.Tapestry;
021    import org.apache.tapestry.engine.ServiceEncoding;
022    import org.apache.tapestry.services.ServiceConstants;
023    import org.testng.annotations.Test;
024    
025    /**
026     * Tests for {@link org.apache.tapestry.engine.encoders.DirectServiceEncoder}.
027     * 
028     * @author Howard M. Lewis Ship
029     * @since 4.0
030     */
031    @Test
032    public class TestDirectServiceEncoder extends BaseComponentTestCase
033    {
034        private ServiceEncoding newEncoding(String servletPath)
035        {
036            ServiceEncoding encoding = newMock(ServiceEncoding.class);
037    
038            expect(encoding.getServletPath()).andReturn(servletPath);
039    
040            return encoding;
041        }
042    
043        private void train(ServiceEncoding encoding, String parameterName,
044                String parameterValue)
045        {
046            expect(encoding.getParameterValue(parameterName)).andReturn(parameterValue);
047        }
048    
049        public void testEncodeWrongService()
050        {
051            ServiceEncoding encoding = newMock(ServiceEncoding.class);
052    
053            train(encoding, ServiceConstants.SERVICE, "foo");
054    
055            replay();
056    
057            DirectServiceEncoder encoder = new DirectServiceEncoder();
058    
059            encoder.encode(encoding);
060    
061            verify();
062        }
063    
064        public void testEncodePageInNamespace()
065        {
066            ServiceEncoding encoding = newMock(ServiceEncoding.class);
067    
068            train(encoding, ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
069            train(encoding, ServiceConstants.PAGE, "foo:Bar");
070    
071            replay();
072    
073            DirectServiceEncoder encoder = new DirectServiceEncoder();
074    
075            encoder.encode(encoding);
076    
077            verify();
078        }
079    
080        public void testEncodeStateless()
081        {
082            ServiceEncoding encoding = newMock(ServiceEncoding.class);
083    
084            train(encoding, ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
085            train(encoding, ServiceConstants.PAGE, "admin/Menu");
086            train(encoding, ServiceConstants.SESSION, null);
087            train(encoding, ServiceConstants.COMPONENT, "border.link");
088    
089            encoding.setServletPath("/admin/Menu,border.link.direct");
090            encoding.setParameterValue(ServiceConstants.SERVICE, null);
091            encoding.setParameterValue(ServiceConstants.PAGE, null);
092            encoding.setParameterValue(ServiceConstants.SESSION, null);
093            encoding.setParameterValue(ServiceConstants.COMPONENT, null);
094    
095            replay();
096    
097            DirectServiceEncoder encoder = new DirectServiceEncoder();
098            encoder.setStatelessExtension("direct");
099    
100            encoder.encode(encoding);
101    
102            verify();
103        }
104    
105        public void testEncodeStateful()
106        {
107            ServiceEncoding encoding = newMock(ServiceEncoding.class);
108    
109            train(encoding, ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
110            train(encoding, ServiceConstants.PAGE, "admin/Menu");
111            train(encoding, ServiceConstants.SESSION, "T");
112            train(encoding, ServiceConstants.COMPONENT, "border.link");
113    
114            encoding.setServletPath("/admin/Menu,border.link.sdirect");
115            encoding.setParameterValue(ServiceConstants.SERVICE, null);
116            encoding.setParameterValue(ServiceConstants.PAGE, null);
117            encoding.setParameterValue(ServiceConstants.SESSION, null);
118            encoding.setParameterValue(ServiceConstants.COMPONENT, null);
119    
120            replay();
121    
122            DirectServiceEncoder encoder = new DirectServiceEncoder();
123            encoder.setStatefulExtension("sdirect");
124    
125            encoder.encode(encoding);
126    
127            verify();
128        }
129    
130        public void testDecodeWrongExtension()
131        {
132            ServiceEncoding encoding = newEncoding("/foo.svc");
133    
134            replay();
135    
136            DirectServiceEncoder encoder = new DirectServiceEncoder();
137            encoder.setStatelessExtension("direct");
138            encoder.setStatefulExtension("sdirect");
139    
140            encoder.decode(encoding);
141    
142            verify();
143        }
144    
145        public void testDecodeStateless()
146        {
147            ServiceEncoding encoding = newEncoding("/admin/Menu,border.link.direct");
148    
149            encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
150            encoding.setParameterValue(ServiceConstants.PAGE, "admin/Menu");
151            encoding.setParameterValue(ServiceConstants.SESSION, null);
152            encoding.setParameterValue(ServiceConstants.COMPONENT, "border.link");
153    
154            replay();
155    
156            DirectServiceEncoder encoder = new DirectServiceEncoder();
157            encoder.setStatelessExtension("direct");
158            encoder.setStatefulExtension("sdirect");
159    
160            encoder.decode(encoding);
161    
162            verify();
163        }
164        
165        public void testDecodeStateful()
166        {
167            ServiceEncoding encoding = newEncoding("/admin/Menu,border.link.sdirect");
168    
169            encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
170            encoding.setParameterValue(ServiceConstants.PAGE, "admin/Menu");
171            encoding.setParameterValue(ServiceConstants.SESSION, "T");
172            encoding.setParameterValue(ServiceConstants.COMPONENT, "border.link");
173    
174            replay();
175    
176            DirectServiceEncoder encoder = new DirectServiceEncoder();
177            encoder.setStatelessExtension("direct");
178            encoder.setStatefulExtension("sdirect");
179    
180            encoder.decode(encoding);
181    
182            verify();
183        }    
184    }