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.portlet; 016 017 import static org.easymock.EasyMock.checkOrder; 018 import static org.easymock.EasyMock.expect; 019 020 import java.util.ArrayList; 021 import java.util.Collections; 022 import java.util.List; 023 024 import org.apache.tapestry.BaseComponentTestCase; 025 import org.apache.tapestry.IPage; 026 import org.apache.tapestry.IRequestCycle; 027 import org.apache.tapestry.PageNotFoundException; 028 import org.testng.annotations.Test; 029 030 import javax.portlet.PortletMode; 031 import javax.portlet.PortletRequest; 032 import javax.portlet.WindowState; 033 034 /** 035 * Tests for {@link org.apache.tapestry.portlet.MatchingPortletPageResolver}. 036 * 037 * @author Howard M. Lewis Ship 038 * @since 4.0 039 */ 040 @Test 041 public class TestMatchingPortletPageResolver extends BaseComponentTestCase 042 { 043 044 private IRequestCycle newCycle(String pageName) 045 { 046 IPage page = newPage(); 047 048 IRequestCycle cycle = newCycle(); 049 checkOrder(cycle, false); 050 051 expect(cycle.getPage(pageName)).andReturn(page); 052 053 return cycle; 054 } 055 056 private PageResolverContribution newContribution(String mimeType, String portletMode, 057 String windowState, String pageName) 058 { 059 PageResolverContribution result = new PageResolverContribution(); 060 result.setMimeType(mimeType); 061 result.setPortletMode(portletMode); 062 result.setWindowState(windowState); 063 result.setPageName(pageName); 064 065 return result; 066 } 067 068 public void testNoMatchOnContentType() 069 { 070 IRequestCycle cycle = newCycle(); 071 072 PortletRequest request = newMock(PortletRequest.class); 073 074 trainContentType(request, "text/xml"); 075 076 List l = Collections.singletonList(newContribution("text/html", null, "wierd", "Wierd")); 077 078 replay(); 079 080 MatchingPortletPageResolver resolver = new MatchingPortletPageResolver(); 081 resolver.setContributions(l); 082 resolver.initializeService(); 083 resolver.setRequest(request); 084 085 assertNull(resolver.getPageNameForRequest(cycle)); 086 087 verify(); 088 } 089 090 public void testNoMatchOnPortletMode() 091 { 092 IRequestCycle cycle = newCycle(); 093 094 PortletRequest request = newMock(PortletRequest.class); 095 096 trainPortletMode(request, "edit"); 097 098 List l = Collections.singletonList(newContribution(null, "view", null, "Wierd")); 099 100 replay(); 101 102 MatchingPortletPageResolver resolver = new MatchingPortletPageResolver(); 103 resolver.setContributions(l); 104 resolver.initializeService(); 105 resolver.setRequest(request); 106 107 assertNull(resolver.getPageNameForRequest(cycle)); 108 109 verify(); 110 } 111 112 public void testNoMatchOnWindowState() 113 { 114 IRequestCycle cycle = newCycle(); 115 116 PortletRequest request = newMock(PortletRequest.class); 117 118 trainWindowState(request, "huge"); 119 120 List l = Collections.singletonList(newContribution(null, null, "tiny", "Wierd")); 121 122 replay(); 123 124 MatchingPortletPageResolver resolver = new MatchingPortletPageResolver(); 125 resolver.setContributions(l); 126 resolver.initializeService(); 127 resolver.setRequest(request); 128 129 assertNull(resolver.getPageNameForRequest(cycle)); 130 131 verify(); 132 } 133 134 public void testSortingCounts() 135 { 136 IRequestCycle cycle = newCycle("EditHuge"); 137 138 PortletRequest request = newMock(PortletRequest.class); 139 140 List l = new ArrayList(); 141 l.add(newContribution(null, "edit", null, "EditNormal")); 142 l.add(newContribution(null, "edit", "huge", "EditHuge")); 143 144 trainPortletMode(request, "edit"); 145 trainWindowState(request, "huge"); 146 147 replay(); 148 149 MatchingPortletPageResolver resolver = new MatchingPortletPageResolver(); 150 resolver.setContributions(l); 151 resolver.initializeService(); 152 resolver.setRequest(request); 153 154 assertEquals("EditHuge", resolver.getPageNameForRequest(cycle)); 155 156 verify(); 157 } 158 159 public void testPageMissing() 160 { 161 IPage page = newPage(); 162 IRequestCycle cycle = newCycle(); 163 164 PortletRequest request = newMock(PortletRequest.class); 165 166 List l = new ArrayList(); 167 l.add(newContribution(null, "edit", null, "EditNormal")); 168 l.add(newContribution(null, "edit", "huge", "EditHuge")); 169 170 trainPortletMode(request, "edit"); 171 trainWindowState(request, "huge"); 172 173 expect(cycle.getPage("EditHuge")).andThrow(new PageNotFoundException("missing!")); 174 175 trainPortletMode(request, "edit"); 176 177 expect(cycle.getPage("EditNormal")).andReturn(page); 178 179 replay(); 180 181 MatchingPortletPageResolver resolver = new MatchingPortletPageResolver(); 182 resolver.setContributions(l); 183 resolver.initializeService(); 184 resolver.setRequest(request); 185 186 assertEquals("EditNormal", resolver.getPageNameForRequest(cycle)); 187 188 verify(); 189 } 190 191 private void trainContentType(PortletRequest request, String contentType) 192 { 193 expect(request.getResponseContentType()).andReturn(contentType); 194 } 195 196 private void trainPortletMode(PortletRequest request, String modeName) 197 { 198 PortletMode mode = new PortletMode(modeName); 199 200 expect(request.getPortletMode()).andReturn(mode); 201 } 202 203 private void trainWindowState(PortletRequest request, String stateName) 204 { 205 WindowState state = new WindowState(stateName); 206 207 expect(request.getWindowState()).andReturn(state); 208 } 209 }