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 }