001package 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
022import static org.junit.Assert.assertEquals;
023import static org.junit.Assert.assertTrue;
024import static org.junit.Assert.assertFalse;
025
026import org.apache.fulcrum.parser.DefaultParameterParser;
027import org.apache.fulcrum.parser.ParameterParser;
028import org.apache.fulcrum.parser.ParserService;
029import org.apache.turbine.services.TurbineServices;
030import org.apache.turbine.test.BaseTestCase;
031import org.apache.turbine.util.ServerData;
032import org.apache.turbine.util.TurbineConfig;
033import org.junit.AfterClass;
034import org.junit.Before;
035import org.junit.BeforeClass;
036import org.junit.Test;
037
038/**
039 * Testing of the TurbineURI class
040 *
041 * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
042 * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
043 * @version $Id: TurbineURITest.java 1616993 2014-08-09 17:03:07Z tv $
044 */
045public class TurbineURITest extends BaseTestCase
046{
047    private TurbineURI turi;
048
049    private ParserService parserService;
050
051    private static TurbineConfig tc = null;
052
053
054    @BeforeClass
055    public static void init() {
056        tc =  new TurbineConfig(
057                            ".",
058                            "/conf/test/CompleteTurbineResources.properties");
059        tc.initialize();
060    }
061    /**
062     * Performs any initialization that must happen before each test is run.
063     */
064
065    @Before
066    public void setup()
067    {
068        // Setup configuration
069
070        ServerData sd = new ServerData("www.testserver.com",
071                URIConstants.HTTP_PORT, URIConstants.HTTP, "/servlet/turbine",
072                "/context");
073        turi = new TurbineURI(sd);
074
075        parserService = (ParserService)TurbineServices.getInstance().getService(ParserService.ROLE);
076    }
077
078    /**
079     * Clean up after each test is run.
080     */
081    @AfterClass
082    public static void tearDown()
083    {
084        if (tc != null)
085        {
086            tc.dispose();
087        }
088
089    }
090
091    @Test public void testAddRemove()
092    {
093
094        assertFalse("TurbineURI should not have a pathInfo", turi.hasPathInfo());
095        assertFalse("TurbineURI must not have a queryData", turi.hasQueryData());
096        turi.addPathInfo("test", "x");
097        assertTrue("TurbineURI must have a pathInfo", turi.hasPathInfo());
098        assertFalse("TurbineURI must not have a queryData", turi.hasQueryData());
099        turi.removePathInfo("test");
100        assertFalse("TurbineURI must not have a pathInfo", turi.hasPathInfo());
101        assertFalse("TurbineURI must not have a queryData", turi.hasQueryData());
102
103        assertFalse("TurbineURI should not have a queryData", turi.hasQueryData());
104        assertFalse("TurbineURI must not have a pathInfo", turi.hasPathInfo());
105        turi.addQueryData("test", "x");
106        assertTrue("TurbineURI must have a queryData", turi.hasQueryData());
107        assertFalse("TurbineURI must not have a pathInfo", turi.hasPathInfo());
108        turi.removeQueryData("test");
109        assertFalse("TurbineURI must not have a queryData", turi.hasQueryData());
110        assertFalse("TurbineURI must not have a pathInfo", turi.hasPathInfo());
111    }
112
113    @Test public void testEmptyAndNullQueryData()
114    {
115        // Check empty String
116        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
117        turi.addQueryData("test", "");
118        assertEquals("/context/servlet/turbine?test=", turi.getRelativeLink());
119        turi.removeQueryData("test");
120
121        // Check null
122        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
123        turi.addQueryData("test", null);
124        assertEquals("/context/servlet/turbine?test=null", turi
125                .getRelativeLink());
126        turi.removeQueryData("test");
127        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
128    }
129
130    @Test public void testEmptyAndNullPathInfo()
131    {
132        // Check empty String
133        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
134        turi.addPathInfo("test", "");
135        // Kind of susspect result - might result in "//" in the URL.
136        assertEquals("/context/servlet/turbine/test/", turi.getRelativeLink());
137        turi.removePathInfo("test");
138
139        // Check null
140        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
141        turi.addPathInfo("test", null);
142        assertEquals("/context/servlet/turbine/test/null", turi
143                .getRelativeLink());
144        turi.removePathInfo("test");
145        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
146    }
147
148    @Test public void testAddEmptyParameterParser()
149    {
150        ParameterParser pp = new DefaultParameterParser();
151        turi.add(1, pp); // 1 = query data
152        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
153    }
154
155    @Test public void testAddParameterParser() throws InstantiationException
156    {
157        ParameterParser pp = parserService.getParser(DefaultParameterParser.class);
158        pp.add("test", "");
159        turi.add(1, pp); // 1 = query data
160        assertEquals("/context/servlet/turbine?test=", turi.getRelativeLink());
161        turi.removeQueryData("test");
162        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
163
164        parserService.putParser(pp);
165        pp = parserService.getParser(DefaultParameterParser.class);
166        pp.add("test", (String) null);
167        turi.add(1, pp); // 1 = query data
168        // Should make the following work so as to be consistent with directly
169        // added values.
170        // assertEquals("/context/servlet/turbine?test=null",
171        // turi.getRelativeLink());
172        turi.removeQueryData("test");
173        assertEquals("/context/servlet/turbine", turi.getRelativeLink());
174
175        // TRB-8
176        //
177        // This is commented out for now as it results in a ClassCastException.
178        // The 2_3 branch parser changes need to be merged into the fulcrum
179        // code.
180        //
181        // pp = new DefaultParameterParser();
182        // DiskFileItemFactory factory = new DiskFileItemFactory(10240, null);
183        // FileItem test = factory.createItem("upload-field",
184        // "application/octet-stream", false, null);
185        // pp.append("upload-field", test);
186        // // The following causes a ClassCastException with or without the
187        // TRB-8 fix.
188        // turi.add(1, pp); // 1 = query data
189        // assertEquals("/context/servlet/turbine?upload-field=",
190        // turi.getRelativeLink());
191        // turi.removeQueryData("upload-field");
192        // assertEquals("/context/servlet/turbine", turi.getRelativeLink());
193    }
194
195}