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.callback;
016    
017    import static org.easymock.EasyMock.expect;
018    
019    import org.apache.hivemind.ApplicationRuntimeException;
020    import org.apache.tapestry.BaseComponentTestCase;
021    import org.apache.tapestry.IExternalPage;
022    import org.apache.tapestry.IPage;
023    import org.apache.tapestry.IRequestCycle;
024    import org.testng.annotations.Test;
025    
026    /**
027     * Tests for {@link org.apache.tapestry.callback.ExternalCallback}.
028     * 
029     * @author Howard M. Lewis Ship
030     * @since 4.0
031     */
032    @Test
033    public class TestExternalCallback extends BaseComponentTestCase
034    {
035        private IExternalPage newExternalPage()
036        {
037            return newMock(IExternalPage.class);
038        }
039    
040        private IExternalPage newExternalPage(String pageName)
041        {
042            IExternalPage page = newMock(IExternalPage.class);
043    
044            expect(page.getPageName()).andReturn(pageName);
045    
046            return page;
047        }
048    
049        public void testByName()
050        {
051            Object[] parameters =
052            { "param1", "param2" };
053    
054            IExternalPage page = newExternalPage();
055            IRequestCycle cycle = newCycleGetPage("Fred", page);
056    
057            cycle.activate(page);
058    
059            page.activateExternalPage(parameters, cycle);
060    
061            replay();
062    
063            ExternalCallback callback = new ExternalCallback("Fred", parameters);
064    
065            assertEquals("ExternalCallback[Fred/param1, param2]", callback.toString());
066    
067            callback.performCallback(cycle);
068    
069            verify();
070        }
071    
072        public void testByNameNoParameters()
073        {
074            IExternalPage page = newExternalPage();
075            IRequestCycle cycle = newCycleGetPage("Fred", page);
076    
077            cycle.activate(page);
078    
079            page.activateExternalPage(null, cycle);
080    
081            replay();
082    
083            ExternalCallback callback = new ExternalCallback("Fred", null);
084    
085            assertEquals("ExternalCallback[Fred]", callback.toString());
086    
087            callback.performCallback(cycle);
088    
089            verify();
090        }
091    
092        public void testByPage()
093        {
094            Object[] parameters =
095            { "param1", "param2" };
096    
097            IExternalPage page = newExternalPage("Barney");
098            IRequestCycle cycle = newCycleGetPage("Barney", page);
099    
100            cycle.activate(page);
101    
102            page.activateExternalPage(parameters, cycle);
103    
104            replay();
105    
106            ExternalCallback callback = new ExternalCallback(page, parameters);
107    
108            assertEquals("ExternalCallback[Barney/param1, param2]", callback.toString());
109    
110            callback.performCallback(cycle);
111    
112            verify();
113        }
114    
115        public void testNotExternalPage()
116        {
117            IPage page = newPage();
118            IRequestCycle cycle = newCycleGetPage("Barney", page);
119    
120            replay();
121    
122            ExternalCallback callback = new ExternalCallback("Barney", null);
123    
124            try
125            {
126                callback.performCallback(cycle);
127            }
128            catch (ApplicationRuntimeException ex)
129            {
130                assertEquals(
131                        "Page Barney does not implement the IExternalPage interface, and may not be used with the external service.",
132                        ex.getMessage());
133            }
134    
135            verify();
136        }
137    }