    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017    package org.apache.commons.fileupload;
    018
    019    import junit.framework.Test;
    020    import junit.framework.TestCase;
    021    import junit.framework.TestSuite;
    022    import java.util.Map;
    023
    024    /**
    025     * Unit tests for {@link ParameterParser}.
    026     *
    027     * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
    028     */
    029    public class ParameterParserTest extends TestCase
    030    {
    031
    032        // ------------------------------------------------------------ Constructor
    033        public ParameterParserTest(String testName)
    034        {
    035            super(testName);
    036        }
    037
    038        // ------------------------------------------------------------------- Main
    039        public static void main(String args[])
    040        {
    041            String[] testCaseName = { ParameterParserTest.class.getName()};
    042            junit.textui.TestRunner.main(testCaseName);
    043        }
    044
    045        // ------------------------------------------------------- TestCase Methods
    046
    047        public static Test suite()
    048        {
    049            return new TestSuite(ParameterParserTest.class);
    050        }
    051
    052        public void testParsing()
    053        {
    054            String s =
    055                "test; test1 =  stuff   ; test2 =  \"stuff; stuff\"; test3=\"stuff";
    056            ParameterParser parser = new ParameterParser();
    057            Map params = parser.parse(s, ';');
    058            assertEquals(null, params.get("test"));
    059            assertEquals("stuff", params.get("test1"));
    060            assertEquals("stuff; stuff", params.get("test2"));
    061            assertEquals("\"stuff", params.get("test3"));
    062
    063            params = parser.parse(s, new char[] { ',', ';' });
    064            assertEquals(null, params.get("test"));
    065            assertEquals("stuff", params.get("test1"));
    066            assertEquals("stuff; stuff", params.get("test2"));
    067            assertEquals("\"stuff", params.get("test3"));
    068
    069            s = "  test  , test1=stuff   ,  , test2=, test3, ";
    070            params = parser.parse(s, ',');
    071            assertEquals(null, params.get("test"));
    072            assertEquals("stuff", params.get("test1"));
    073            assertEquals(null, params.get("test2"));
    074            assertEquals(null, params.get("test3"));
    075
    076            s = "  test";
    077            params = parser.parse(s, ';');
    078            assertEquals(null, params.get("test"));
    079
    080            s = "  ";
    081            params = parser.parse(s, ';');
    082            assertEquals(0, params.size());
    083
    084            s = " = stuff ";
    085            params = parser.parse(s, ';');
    086            assertEquals(0, params.size());
    087        }
    088
    089        public void testContentTypeParsing()
    090        {
    091            String s = "text/plain; Charset=UTF-8";
    092            ParameterParser parser = new ParameterParser();
    093            parser.setLowerCaseNames(true);
    094            Map params = parser.parse(s, ';');
    095            assertEquals("UTF-8", params.get("charset"));
    096        }
    097
    098        public void testParsingEscapedChars()
    099        {
    100            String s = "param = \"stuff\\\"; more stuff\"";
    101            ParameterParser parser = new ParameterParser();
    102            Map params = parser.parse(s, ';');
    103            assertEquals(1, params.size());
    104            assertEquals("stuff\\\"; more stuff", params.get("param"));
    105
    106            s = "param = \"stuff\\\\\"; anotherparam";
    107            params = parser.parse(s, ';');
    108            assertEquals(2, params.size());
    109            assertEquals("stuff\\\\", params.get("param"));
    110            assertNull(params.get("anotherparam"));
    111        }
    112
    113        // See: http://issues.apache.org/jira/browse/FILEUPLOAD-139
    114        public void testFileUpload139()
    115        {
    116            ParameterParser parser = new ParameterParser();
    117            String s = "Content-type: multipart/form-data , boundary=AaB03x";
    118            Map params = parser.parse(s, new char[] { ',', ';' });
    119            assertEquals("AaB03x", params.get("boundary"));
    120
    121            s = "Content-type: multipart/form-data, boundary=AaB03x";
    122            params = parser.parse(s, new char[] { ';', ',' });
    123            assertEquals("AaB03x", params.get("boundary"));
    124
    125            s = "Content-type: multipart/mixed, boundary=BbC04y";
    126            params = parser.parse(s, new char[] { ',', ';' });
    127            assertEquals("BbC04y", params.get("boundary"));
    128        }
    129    }