    001    package org.apache.turbine.util.uri;
    002
    003    /*
    004     * Licensed to the Apache Software Foundation (ASF) under one
    005     * or more contributor license agreements.  See the NOTICE file
    006     * distributed with this work for additional information
    007     * regarding copyright ownership.  The ASF licenses this file
    008     * to you under the Apache License, Version 2.0 (the
    009     * "License"); you may not use this file except in compliance
    010     * with the License.  You may obtain a copy of the License at
    011     *
    012     *   http://www.apache.org/licenses/LICENSE-2.0
    013     *
    014     * Unless required by applicable law or agreed to in writing,
    015     * software distributed under the License is distributed on an
    016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    017     * KIND, either express or implied.  See the License for the
    018     * specific language governing permissions and limitations
    019     * under the License.
    020     */
    021
    022    import org.apache.fulcrum.parser.DefaultParameterParser;
    023    import org.apache.fulcrum.parser.ParameterParser;
    024    import org.apache.fulcrum.parser.ParserService;
    025    import org.apache.turbine.services.TurbineServices;
    026    import org.apache.turbine.test.BaseTestCase;
    027    import org.apache.turbine.util.ServerData;
    028    import org.apache.turbine.util.TurbineConfig;
    029
    030    /**
    031     * Testing of the TurbineURI class
    032     *
    033     * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
    034     * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
    035     * @version $Id: TurbineURITest.java 717931 2008-11-15 21:40:43Z tv $
    036     */
    037    public class TurbineURITest extends BaseTestCase
    038    {
    039        private TurbineURI turi;
    040
    041        private ParserService parserService;
    042
    043        private static TurbineConfig tc = null;
    044
    045        /**
    046         * Constructor for test.
    047         *
    048         * @param testName
    049         *            name of the test being executed
    050         */
    051        public TurbineURITest(String testName) throws Exception
    052        {
    053            super(testName);
    054
    055            // Setup configuration
    056            tc =
    057                new TurbineConfig(
    058                    ".",
    059                    "/conf/test/CompleteTurbineResources.properties");
    060            tc.initialize();
    061        }
    062
    063        /**
    064         * Performs any initialization that must happen before each test is run.
    065         */
    066        protected void setUp()
    067        {
    068            ServerData sd = new ServerData("www.testserver.com",
    069                    URIConstants.HTTP_PORT, URIConstants.HTTP, "/servlet/turbine",
    070                    "/context");
    071            turi = new TurbineURI(sd);
    072
    073            parserService = (ParserService)TurbineServices.getInstance().getService(ParserService.ROLE);
    074        }
    075
    076        /**
    077         * Clean up after each test is run.
    078         */
    079        protected void tearDown()
    080        {
    081            if (tc != null)
    082            {
    083                tc.dispose();
    084            }
    085
    086            turi = null;
    087        }
    088
    089        public void testAddRemove()
    090        {
    091            assertEquals("TurbineURI should not have a pathInfo", false, turi
    092                    .hasPathInfo());
    093            assertEquals("TurbineURI must not have a queryData", false, turi
    094                    .hasQueryData());
    095            turi.addPathInfo("test", "x");
    096            assertEquals("TurbineURI must have a pathInfo", true, turi
    097                    .hasPathInfo());
    098            assertEquals("TurbineURI must not have a queryData", false, turi
    099                    .hasQueryData());
    100            turi.removePathInfo("test");
    101            assertEquals("TurbineURI must not have a pathInfo", false, turi
    102                    .hasPathInfo());
    103            assertEquals("TurbineURI must not have a queryData", false, turi
    104                    .hasQueryData());
    105
    106            assertEquals("TurbineURI should not have a queryData", false, turi
    107                    .hasQueryData());
    108            assertEquals("TurbineURI must not have a pathInfo", false, turi
    109                    .hasPathInfo());
    110            turi.addQueryData("test", "x");
    111            assertEquals("TurbineURI must have a queryData", true, turi
    112                    .hasQueryData());
    113            assertEquals("TurbineURI must not have a pathInfo", false, turi
    114                    .hasPathInfo());
    115            turi.removeQueryData("test");
    116            assertEquals("TurbineURI must not have a queryData", false, turi
    117                    .hasQueryData());
    118            assertEquals("TurbineURI must not have a pathInfo", false, turi
    119                    .hasPathInfo());
    120        }
    121
    122        public void testEmptyAndNullQueryData()
    123        {
    124            // Check empty String
    125            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    126            turi.addQueryData("test", "");
    127            assertEquals("/context/servlet/turbine?test=", turi.getRelativeLink());
    128            turi.removeQueryData("test");
    129
    130            // Check null
    131            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    132            turi.addQueryData("test", null);
    133            assertEquals("/context/servlet/turbine?test=null", turi
    134                    .getRelativeLink());
    135            turi.removeQueryData("test");
    136            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    137        }
    138
    139        public void testEmptyAndNullPathInfo()
    140        {
    141            // Check empty String
    142            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    143            turi.addPathInfo("test", "");
    144            // Kind of susspect result - might result in "//" in the URL.
    145            assertEquals("/context/servlet/turbine/test/", turi.getRelativeLink());
    146            turi.removePathInfo("test");
    147
    148            // Check null
    149            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    150            turi.addPathInfo("test", null);
    151            assertEquals("/context/servlet/turbine/test/null", turi
    152                    .getRelativeLink());
    153            turi.removePathInfo("test");
    154            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    155        }
    156
    157        public void testAddEmptyParameterParser()
    158        {
    159            ParameterParser pp = new DefaultParameterParser();
    160            turi.add(1, pp); // 1 = query data
    161            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    162        }
    163
    164        public void testAddParameterParser() throws InstantiationException
    165        {
    166            ParameterParser pp = (ParameterParser) parserService.getParser(DefaultParameterParser.class);
    167            pp.add("test", "");
    168            turi.add(1, pp); // 1 = query data
    169            assertEquals("/context/servlet/turbine?test=", turi.getRelativeLink());
    170            turi.removeQueryData("test");
    171            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    172
    173            parserService.putParser(pp);
    174            pp = (ParameterParser) parserService.getParser(DefaultParameterParser.class);
    175            pp.add("test", (String) null);
    176            turi.add(1, pp); // 1 = query data
    177            // Should make the following work so as to be consistent with directly
    178            // added values.
    179            // assertEquals("/context/servlet/turbine?test=null",
    180            // turi.getRelativeLink());
    181            turi.removeQueryData("test");
    182            assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    183
    184            // TRB-8
    185            //
    186            // This is commented out for now as it results in a ClassCastException.
    187            // The 2_3 branch parser changes need to be merged into the fulcrum
    188            // code.
    189            //
    190            // pp = new DefaultParameterParser();
    191            // DiskFileItemFactory factory = new DiskFileItemFactory(10240, null);
    192            // FileItem test = factory.createItem("upload-field",
    193            // "application/octet-stream", false, null);
    194            // pp.append("upload-field", test);
    195            // // The following causes a ClassCastException with or without the
    196            // TRB-8 fix.
    197            // turi.add(1, pp); // 1 = query data
    198            // assertEquals("/context/servlet/turbine?upload-field=",
    199            // turi.getRelativeLink());
    200            // turi.removeQueryData("upload-field");
    201            // assertEquals("/context/servlet/turbine", turi.getRelativeLink());
    202        }
    203
    204    }