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 }