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 org.apache.tapestry.Tapestry;
018    import org.apache.tapestry.TestBase;
019    import org.apache.tapestry.asset.AssetService;
020    import org.apache.tapestry.engine.ServiceEncoding;
021    import org.apache.tapestry.services.ServiceConstants;
022    import static org.easymock.EasyMock.expect;
023    import org.testng.annotations.Test;
024    
025    /**
026     * Tests for {@link org.apache.tapestry.engine.encoders.AssetEncoder}.
027     * 
028     * @author Howard M. Lewis Ship
029     * @since 4.0
030     */
031    @Test
032    public class AssetEncoderTest extends TestBase {
033        public void test_Wrong_Service()
034        {
035            ServiceEncoding encoding = newEncoding();
036    
037            trainGetParameterValue(encoding, ServiceConstants.SERVICE, "foo");
038    
039            replay();
040    
041            new AssetEncoder().encode(encoding);
042    
043            verify();
044        }
045    
046        protected void trainGetParameterValue(ServiceEncoding encoding, String name, String value)
047        {
048            expect(encoding.getParameterValue(name)).andReturn(value);
049        }
050    
051        protected ServiceEncoding newEncoding()
052        {
053            return newMock(ServiceEncoding.class);
054        }
055    
056        public void test_Wrong_Path()
057        {
058            ServiceEncoding encoding = newEncoding();
059    
060            trainGetServletPath(encoding, "/Home.page");
061    
062            replay();
063    
064            AssetEncoder encoder = new AssetEncoder();
065            encoder.setPath("/assets");
066    
067            encoder.decode(encoding);
068    
069            verify();
070        }
071    
072        protected void trainGetServletPath(ServiceEncoding encoding, String servletPath)
073        {
074            expect(encoding.getServletPath()).andReturn(servletPath);
075        }
076    
077        public void test_Encode()
078        {
079            ServiceEncoding encoding = newEncoding();
080            
081            trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
082            trainGetParameterValue(encoding, AssetService.PATH, "/foo/bar/Baz.gif");
083            trainGetParameterValue(encoding, AssetService.DIGEST, "12345");
084            
085            encoding.setServletPath("/assets/12345/foo/bar/Baz.gif");
086            encoding.setParameterValue(AssetService.PATH, null);
087            encoding.setParameterValue(AssetService.DIGEST, null);
088            encoding.setParameterValue(ServiceConstants.SERVICE, null);
089    
090            replay();
091    
092            AssetEncoder encoder = new AssetEncoder();
093            encoder.setPath("/assets");
094    
095            encoder.encode(encoding);
096    
097            verify();
098        }
099    
100        public void test_Encode_Missing_Path()
101        {
102            ServiceEncoding encoding = newEncoding();
103            
104            trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
105            trainGetParameterValue(encoding, AssetService.PATH, "foo/bar/Baz.gif");
106            trainGetParameterValue(encoding, AssetService.DIGEST, "12345");
107            
108            encoding.setServletPath("/assets/12345/foo/bar/Baz.gif");
109            encoding.setParameterValue(AssetService.PATH, null);
110            encoding.setParameterValue(AssetService.DIGEST, null);
111            encoding.setParameterValue(ServiceConstants.SERVICE, null);
112            
113            replay();
114    
115            AssetEncoder encoder = new AssetEncoder();
116            encoder.setPath("/assets");
117    
118            encoder.encode(encoding);
119    
120            verify();
121        }
122        
123        public void test_Decode()
124        {
125            ServiceEncoding encoding = newEncoding();
126    
127            trainGetServletPath(encoding, "/assets");
128            trainGetPathInfo(encoding, "/12345/foo/bar/Baz.gif");
129    
130            encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
131            encoding.setParameterValue(AssetService.DIGEST, "12345");
132            encoding.setParameterValue(AssetService.PATH, "/foo/bar/Baz.gif");
133    
134            replay();
135    
136            AssetEncoder encoder = new AssetEncoder();
137            encoder.setPath("/assets");
138    
139            encoder.decode(encoding);
140    
141            verify();
142        }
143    
144        protected void trainGetPathInfo(ServiceEncoding encoding, String pathInfo)
145        {
146            expect(encoding.getPathInfo()).andReturn(pathInfo);
147        }
148        
149        public void test_Encode_Unprotected()
150        {
151            ServiceEncoding encoding = newEncoding();
152    
153            trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
154            trainGetParameterValue(encoding, AssetService.PATH, "/foo/bar/Baz.gif");
155            trainGetParameterValue(encoding, AssetService.DIGEST, null);
156            
157            encoding.setServletPath("/assets/" + AssetEncoder.DIGEST_STATIC + "/foo/bar/Baz.gif");
158            encoding.setParameterValue(AssetService.PATH, null);
159            encoding.setParameterValue(AssetService.DIGEST, null);
160            encoding.setParameterValue(ServiceConstants.SERVICE, null);
161    
162            replay();
163    
164            AssetEncoder encoder = new AssetEncoder();
165            encoder.setPath("/assets");
166    
167            encoder.encode(encoding);
168    
169            verify();
170        }
171        
172        public void test_Decode_Unprotected()
173        {
174            ServiceEncoding encoding = newEncoding();
175            
176            trainGetServletPath(encoding, "/assets");
177            trainGetPathInfo(encoding, "/" + AssetEncoder.DIGEST_STATIC + "/foo/bar/Baz.gif");
178            
179            encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
180            encoding.setParameterValue(AssetService.DIGEST, AssetEncoder.DIGEST_STATIC);
181            encoding.setParameterValue(AssetService.PATH, "/foo/bar/Baz.gif");
182    
183            replay();
184    
185            AssetEncoder encoder = new AssetEncoder();
186            encoder.setPath("/assets");
187    
188            encoder.decode(encoding);
189    
190            verify();
191        }
192    
193        public void test_Decode_Null_Pathinfo()
194        {
195            ServiceEncoding encoding = newEncoding();
196    
197            trainGetServletPath(encoding, "/assets");
198            trainGetPathInfo(encoding, null);
199    
200            encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
201            encoding.setParameterValue(AssetService.DIGEST, "");
202            encoding.setParameterValue(AssetService.PATH, "");
203    
204            replay();
205    
206            AssetEncoder encoder = new AssetEncoder();
207            encoder.setPath("/assets");
208    
209            encoder.decode(encoding);
210    
211            verify();
212        }
213        
214        public void test_Decode_Empty_Pathinfo()
215        {
216            ServiceEncoding encoding = newEncoding();
217    
218            trainGetServletPath(encoding, "/assets");
219            trainGetPathInfo(encoding, "/");
220    
221            encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
222            encoding.setParameterValue(AssetService.DIGEST, "");
223            encoding.setParameterValue(AssetService.PATH, "");         
224    
225            replay();
226    
227            AssetEncoder encoder = new AssetEncoder();
228            encoder.setPath("/assets");
229    
230            encoder.decode(encoding);
231    
232            verify();
233        }
234    }