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    }