001    // Copyright 2004, 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    package org.apache.tapestry.util.io;
015    
016    import org.apache.tapestry.TestBase;
017    import org.apache.tapestry.web.WebRequest;
018    import static org.easymock.EasyMock.checkOrder;
019    import static org.easymock.EasyMock.expect;
020    import org.testng.annotations.Test;
021    
022    /**
023     * Tests functionality of {@link GzipUtil} .
024     *
025     * @author jkuhnert
026     */
027    @Test
028    public class TestGzipUtil extends TestBase {
029        
030        // for more see http://en.wikipedia.org/wiki/User_agent
031        static final String MSIE_5_SUNOS = "Mozilla/4.0 (compatible; MSIE 5.0; SunOS 5.9 sun4u; X11)";
032        static final String MSIE_5_5 = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)";
033        static final String MSIE_6 = "Mozilla/4.0 (compatible; MSIE 6.0; MSN 2.5; Windows 98)";
034        static final String MSIE_6_SP2 = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
035        static final String MSIE_7_BETA_1 = "Mozilla/4.0 (compatible; MSIE 7.0b; Win32)";
036        
037        static final String MOZ_1_5 = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2";
038        static final String MOZ_2_WIN98 = "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0";
039        
040        static final String OPERA_7 = "Opera/7.23 (Windows 98; U) [en]";
041        
042        static final String SAFARI_125 = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko)";
043        static final String SAFARI_204 = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3";
044        
045        public void test_Gzip_Capable()
046        {
047            WebRequest request = newMock(WebRequest.class);
048            checkOrder(request, false);
049            
050            expect(request.getHeader("Accept-Encoding")).andReturn("gzip").anyTimes();
051            
052            expect(request.getHeader("User-Agent")).andReturn(MSIE_5_SUNOS);
053            expect(request.getHeader("User-Agent")).andReturn(MSIE_5_5);
054            expect(request.getHeader("User-Agent")).andReturn(MSIE_6);
055            
056            expect(request.getHeader("User-Agent")).andReturn(MSIE_6_SP2);
057            expect(request.getHeader("User-Agent")).andReturn(MSIE_7_BETA_1);
058            
059            expect(request.getHeader("User-Agent")).andReturn(MOZ_1_5);
060            expect(request.getHeader("User-Agent")).andReturn(MOZ_2_WIN98);
061            expect(request.getHeader("User-Agent")).andReturn(OPERA_7);
062            expect(request.getHeader("User-Agent")).andReturn(SAFARI_125);
063            expect(request.getHeader("User-Agent")).andReturn(SAFARI_204);
064            
065            replay();
066            
067            assertFalse(GzipUtil.isGzipCapable(request));
068            assertFalse(GzipUtil.isGzipCapable(request));
069            assertFalse(GzipUtil.isGzipCapable(request));
070            
071            assertTrue(GzipUtil.isGzipCapable(request));
072            assertTrue(GzipUtil.isGzipCapable(request));
073            assertTrue(GzipUtil.isGzipCapable(request));
074            assertTrue(GzipUtil.isGzipCapable(request));
075            assertTrue(GzipUtil.isGzipCapable(request));
076            assertTrue(GzipUtil.isGzipCapable(request));
077            assertTrue(GzipUtil.isGzipCapable(request));
078            
079            verify();
080        }
081        
082        public void test_Compress_Content_Type()
083        {
084            assertFalse(GzipUtil.shouldCompressContentType(null));
085            assertTrue(GzipUtil.shouldCompressContentType("javascript"));
086            assertTrue(GzipUtil.shouldCompressContentType("html"));
087            assertTrue(GzipUtil.shouldCompressContentType("css"));
088            
089            assertFalse(GzipUtil.shouldCompressContentType("jpeg"));
090            assertFalse(GzipUtil.shouldCompressContentType("image"));
091            assertFalse(GzipUtil.shouldCompressContentType("png"));
092        }
093    }