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.multipart;
016    
017    import org.apache.tapestry.BaseComponentTestCase;
018    import static org.easymock.EasyMock.expect;
019    import org.testng.annotations.Test;
020    
021    import javax.servlet.http.HttpServletRequest;
022    import java.util.Enumeration;
023    import java.util.HashMap;
024    import java.util.Map;
025    
026    /**
027     * Tests for {@link org.apache.tapestry.multipart.UploadFormParametersWrapper}.
028     * 
029     * @author Howard M. Lewis Ship
030     * @since 4.0
031     */
032    @Test
033    public class TestUploadFormParametersWrapper extends BaseComponentTestCase
034    {
035        private HttpServletRequest newHttpRequest()
036        {
037            HttpServletRequest req = newMock(HttpServletRequest.class);
038            expect(req.getParameterMap()).andReturn( new HashMap() ).anyTimes();
039            return req;
040        }
041        
042        public void testMapIsNotModifiable()
043        {
044            HttpServletRequest request = newHttpRequest();
045    
046            replay();
047    
048            Map map = new HashMap();
049    
050            map.put("key", new String[] { "value" });
051    
052            HttpServletRequest r = new UploadFormParametersWrapper(request, map);
053    
054            Map pmap = r.getParameterMap();
055    
056            assertNotSame(map, pmap);
057    
058            assertSame(map.get("key"), pmap.get("key"));
059    
060            try
061            {
062                pmap.put("foo", "bar");
063                unreachable();
064            }
065            catch (UnsupportedOperationException ex)
066            {
067                // Expected.
068            }
069    
070            verify();
071        }
072    
073        public void testGetSingleParameterWhenNull()
074        {
075            HttpServletRequest request = newHttpRequest();
076    
077            replay();
078    
079            HttpServletRequest r = new UploadFormParametersWrapper(request, new HashMap());
080    
081            assertNull(r.getParameter("unknown-key"));
082    
083            verify();
084        }
085    
086        public void testGetSingleParameterWhenEmptyArray()
087        {
088            HttpServletRequest request = newHttpRequest();
089    
090            replay();
091    
092            HashMap params = new HashMap();
093    
094            params.put("empty-key", new String[0]);
095    
096            HttpServletRequest r = new UploadFormParametersWrapper(request, params);
097    
098            assertNull(r.getParameter("empty-key"));
099    
100            verify();
101        }
102    
103        public void testGetParameterValues()
104        {
105            String[] values =
106            { "fred", "barney" };
107    
108            HttpServletRequest request = newHttpRequest();
109    
110            replay();
111    
112            HashMap params = new HashMap();
113    
114            params.put("key", values);
115    
116            HttpServletRequest r = new UploadFormParametersWrapper(request, params);
117    
118            assertSame(values, r.getParameterValues("key"));
119    
120            verify();
121        }
122    
123        public void testGetParameterNames()
124        {
125            HttpServletRequest request = newHttpRequest();
126    
127            replay();
128    
129            HashMap params = new HashMap();
130    
131            params.put("key", new String[0]);
132    
133            HttpServletRequest r = new UploadFormParametersWrapper(request, params);
134    
135            Enumeration e = r.getParameterNames();
136    
137            assertEquals(true, e.hasMoreElements());
138            assertEquals("key", e.nextElement());
139            assertEquals(false, e.hasMoreElements());
140    
141            verify();
142        }
143        
144        public void testGetUrlParameter()  // Test fix for TAPESTRY-340
145        {
146            HttpServletRequest req = newMock(HttpServletRequest.class);
147            expect(req.getParameterMap()).andReturn(new HashMap(){{put("urlParam", new String[]{"urlParamValue"} );}} ).anyTimes();
148    
149            replay();
150            
151            HttpServletRequest r = new UploadFormParametersWrapper(req, new HashMap());
152            
153            assertEquals("urlParamValue", r.getParameter("urlParam") );
154            assertEquals("urlParam", r.getParameterNames().nextElement() );
155        }
156    }