001 // Copyright 2004, 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; 016 017 import org.apache.commons.codec.net.URLCodec; 018 import org.apache.tapestry.BaseComponentTestCase; 019 import org.apache.tapestry.services.ServiceConstants; 020 import org.apache.tapestry.util.QueryParameterMap; 021 import org.apache.tapestry.web.WebRequest; 022 import org.testng.annotations.Test; 023 024 import java.util.HashMap; 025 import java.util.Map; 026 027 /** 028 * Tests for {@link org.apache.tapestry.engine.EngineServiceLink}. 029 * 030 * @author Howard Lewis Ship 031 * @since 3.0 032 */ 033 @Test 034 public class EngineServiceLinkTest extends BaseComponentTestCase 035 { 036 private URLCodec _urlCodec = new URLCodec(); 037 038 private static final String ENCODING = "utf-8"; 039 040 private QueryParameterMap buildParameters(String serviceName, String[] serviceParameters) 041 { 042 Map result = new HashMap(); 043 044 result.put(ServiceConstants.SERVICE, serviceName); 045 result.put(ServiceConstants.PARAMETER, serviceParameters); 046 047 return new QueryParameterMap(result); 048 } 049 050 /** @since 4.0 */ 051 public void testGetURLWithParameters() 052 { 053 WebRequest request = newRequest(); 054 055 EngineServiceLink l = new EngineServiceLink("/context/servlet", ENCODING, _urlCodec, 056 request, buildParameters("myservice", null), true); 057 058 replay(); 059 060 assertEquals("/context/servlet?service=myservice", l.getURL()); 061 062 verify(); 063 064 assertListEquals(new String[] 065 { ServiceConstants.SERVICE, ServiceConstants.PARAMETER }, l.getParameterNames()); 066 067 } 068 069 public void testGetURLWithServiceParameters() 070 { 071 WebRequest request = newRequest(); 072 073 EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request, 074 buildParameters("foo", new String[] 075 { "godzilla", "frodo" }), false); 076 077 replay(); 078 079 assertEquals("/ctx/app?service=foo&sp=godzilla&sp=frodo", l.getURL()); 080 081 verify(); 082 } 083 084 /** @since 4.0 */ 085 086 public void testGetURLSansParameters() 087 { 088 WebRequest request = newRequest(); 089 090 EngineServiceLink l = new EngineServiceLink("/context/servlet", ENCODING, _urlCodec, 091 request, buildParameters("myservice", null), true); 092 093 replay(); 094 095 assertEquals("/context/servlet", l.getURL(null, false)); 096 097 verify(); 098 } 099 100 /** @since 4.0 */ 101 102 public void testGetURLWithAnchor() 103 { 104 WebRequest request = newRequest(); 105 106 EngineServiceLink l = new EngineServiceLink("/context/servlet", ENCODING, _urlCodec, 107 request, buildParameters("myservice", null), false); 108 109 replay(); 110 111 assertEquals("/context/servlet#anchor", l.getURL("anchor", false)); 112 113 verify(); 114 } 115 116 public void testGetURLWithAnchorAndParameters() throws Exception 117 { 118 WebRequest request = newRequest(); 119 120 EngineServiceLink l = new EngineServiceLink("/context/servlet", ENCODING, _urlCodec, 121 request, buildParameters("myservice", null), false); 122 123 replay(); 124 125 assertEquals("/context/servlet?service=myservice#anchor", l.getURL("anchor", true)); 126 127 verify(); 128 } 129 130 public void testGetAbsoluteURL() throws Exception 131 { 132 WebRequest request = newRequest(); 133 134 EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request, 135 buildParameters("myservice", null), false); 136 137 trainGetServerPort(request, 9187); 138 139 trainGetScheme(request, "HTTP"); 140 141 trainGetServerName(request, "TESTSERVER.COM"); 142 143 replay(); 144 145 assertEquals("HTTP://TESTSERVER.COM:9187/ctx/app?service=myservice", l.getAbsoluteURL()); 146 147 verify(); 148 } 149 150 public void testGetAbsoluteURLWithOverrides() throws Exception 151 { 152 WebRequest request = newRequest(); 153 154 EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request, 155 buildParameters("myservice", null), false); 156 157 replay(); 158 159 assertEquals("https://myserver.net:9100/ctx/app?service=myservice", l.getAbsoluteURL( 160 "https", 161 "myserver.net", 162 9100, 163 null, 164 true)); 165 166 verify(); 167 } 168 169 public void testGetURLNotAbsolute() 170 { 171 WebRequest request = newRequest(); 172 173 trainGetScheme(request, "http"); 174 trainGetServerName(request, "myserver.net"); 175 trainGetServerPort(request, 80); 176 177 replay(); 178 179 EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request, 180 buildParameters("myservice", null), false); 181 182 assertEquals("/ctx/app?service=myservice#myanchor", l.getURL( 183 "http", 184 "myserver.net", 185 80, 186 "myanchor", 187 true)); 188 189 verify(); 190 } 191 192 public void testGetURLAbsolute() 193 { 194 WebRequest request = newRequest(); 195 196 trainGetScheme(request, "http"); 197 198 replay(); 199 200 EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request, 201 buildParameters("myservice", null), false); 202 203 assertEquals("https://override.net:8080/ctx/app?service=myservice#myanchor", l.getURL( 204 "https", 205 "override.net", 206 8080, 207 "myanchor", 208 true)); 209 210 verify(); 211 } 212 }