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.html; 016 017 import org.apache.tapestry.BaseComponentTestCase; 018 import org.apache.tapestry.IPage; 019 import org.apache.tapestry.IRequestCycle; 020 import org.apache.tapestry.engine.NullWriter; 021 import org.apache.tapestry.services.ResponseBuilder; 022 import org.apache.tapestry.test.Creator; 023 import static org.easymock.EasyMock.expect; 024 import org.testng.annotations.Test; 025 026 /** 027 * @author Howard M. Lewis Ship 028 * @since 4.0 029 */ 030 @Test 031 public class TestPageEvents extends BaseComponentTestCase 032 { 033 private IPage createPage() 034 { 035 Creator creator = new Creator(); 036 037 return (IPage) creator.newInstance(BasePage.class); 038 } 039 040 public void testPageDetached() 041 { 042 IPage page = createPage(); 043 ListenerFixture l = new ListenerFixture(); 044 045 // Code path: no listener list 046 047 page.detach(); 048 049 page.addPageDetachListener(l); 050 051 page.detach(); 052 053 assertEquals("pageDetached", l.getMethod()); 054 055 l.reset(); 056 057 page.removePageDetachListener(l); 058 059 page.detach(); 060 061 assertNull(l.getMethod()); 062 } 063 064 // Cookie-cutter for the remaining listener interfaces 065 066 public void testPageAttached() 067 { 068 IPage page = createPage(); 069 ListenerFixture l = new ListenerFixture(); 070 071 // Code path: no listener list 072 073 page.attach(null, null); 074 075 page.addPageAttachListener(l); 076 077 page.attach(null, null); 078 079 assertEquals(l.getMethod(), null); 080 081 page.firePageAttached(); 082 083 assertEquals(l.getMethod(), "pageAttached"); 084 085 l.reset(); 086 087 page.removePageAttachListener(l); 088 089 page.attach(null, null); 090 091 assertNull(l.getMethod()); 092 } 093 094 public void testPageBeginRender() 095 { 096 IPage page = createPage(); 097 ListenerFixture l = new ListenerFixture(); 098 099 IRequestCycle cycle = newCycle(); 100 ResponseBuilder builder = newMock(ResponseBuilder.class); 101 102 expect(cycle.isRewinding()).andReturn(true).anyTimes(); 103 104 builder.render(NullWriter.getSharedInstance(), page, cycle); 105 106 replay(); 107 108 // Code path: no listener list 109 110 page.renderPage(builder, cycle); 111 112 verify(); 113 114 expect(cycle.isRewinding()).andReturn(true).anyTimes(); 115 116 builder.render(NullWriter.getSharedInstance(), page, cycle); 117 118 replay(); 119 120 page.addPageBeginRenderListener(l); 121 122 page.renderPage(builder, cycle); 123 124 assertEquals("pageBeginRender", l.getMethod()); 125 126 l.reset(); 127 128 page.removePageBeginRenderListener(l); 129 130 verify(); 131 132 expect(cycle.isRewinding()).andReturn(true).anyTimes(); 133 134 builder.render(NullWriter.getSharedInstance(), page, cycle); 135 136 replay(); 137 138 page.renderPage(builder, cycle); 139 140 assertNull(l.getMethod()); 141 142 verify(); 143 } 144 145 public void testPageEndRender() 146 { 147 IPage page = createPage(); 148 ListenerFixture l = new ListenerFixture(); 149 150 IRequestCycle cycle = newCycle(); 151 ResponseBuilder builder = newMock(ResponseBuilder.class); 152 153 expect(cycle.isRewinding()).andReturn(true).anyTimes(); 154 155 builder.render(NullWriter.getSharedInstance(), page, cycle); 156 157 replay(); 158 159 // Code path: no listener list 160 161 page.renderPage(builder, cycle); 162 163 verify(); 164 165 expect(cycle.isRewinding()).andReturn(true).anyTimes(); 166 167 builder.render(NullWriter.getSharedInstance(), page, cycle); 168 169 replay(); 170 171 page.addPageEndRenderListener(l); 172 173 page.renderPage(builder, cycle); 174 175 assertEquals("pageEndRender", l.getMethod()); 176 177 l.reset(); 178 179 page.removePageEndRenderListener(l); 180 181 verify(); 182 183 expect(cycle.isRewinding()).andReturn(true).anyTimes(); 184 185 builder.render(NullWriter.getSharedInstance(), page, cycle); 186 187 replay(); 188 189 page.renderPage(builder, cycle); 190 191 assertNull(l.getMethod()); 192 193 verify(); 194 } 195 196 public void testPageValidate() 197 { 198 IPage page = createPage(); 199 ListenerFixture l = new ListenerFixture(); 200 201 // Code path: no listener list 202 203 page.validate(null); 204 205 page.addPageValidateListener(l); 206 207 page.validate(null); 208 209 assertEquals("pageValidate", l.getMethod()); 210 211 l.reset(); 212 213 page.removePageValidateListener(l); 214 215 page.validate(null); 216 217 assertNull(l.getMethod()); 218 } 219 220 }