/* * ==================================================================== * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.ogt.http.message; import junit.framework.TestCase; import org.apache.ogt.http.HeaderElement; import org.apache.ogt.http.NameValuePair; import org.apache.ogt.http.message.BasicHeaderValueParser; import org.apache.ogt.http.message.HeaderValueParser; import org.apache.ogt.http.message.ParserCursor; import org.apache.ogt.http.util.CharArrayBuffer; /** * Tests for header value parsing. * * @version $Id: TestBasicHeaderValueParser.java 937295 2010-04-23 13:44:00Z olegk $ */ public class TestBasicHeaderValueParser extends TestCase { // ------------------------------------------------------------ Constructor public TestBasicHeaderValueParser(String testName) { super(testName); } // ------------------------------------------------------- TestCase Methods public void testParseHeaderElements() throws Exception { String headerValue = "name1 = value1; name2; name3=\"value3\" , name4=value4; " + "name5=value5, name6= ; name7 = value7; name8 = \" value8\""; HeaderElement[] elements = BasicHeaderValueParser.parseElements(headerValue, null); // there are 3 elements assertEquals(3,elements.length); // 1st element assertEquals("name1",elements[0].getName()); assertEquals("value1",elements[0].getValue()); // 1st element has 2 getParameters() assertEquals(2,elements[0].getParameters().length); assertEquals("name2",elements[0].getParameters()[0].getName()); assertEquals(null, elements[0].getParameters()[0].getValue()); assertEquals("name3",elements[0].getParameters()[1].getName()); assertEquals("value3",elements[0].getParameters()[1].getValue()); // 2nd element assertEquals("name4",elements[1].getName()); assertEquals("value4",elements[1].getValue()); // 2nd element has 1 parameter assertEquals(1,elements[1].getParameters().length); assertEquals("name5",elements[1].getParameters()[0].getName()); assertEquals("value5",elements[1].getParameters()[0].getValue()); // 3rd element assertEquals("name6",elements[2].getName()); assertEquals("",elements[2].getValue()); // 3rd element has 2 getParameters() assertEquals(2,elements[2].getParameters().length); assertEquals("name7",elements[2].getParameters()[0].getName()); assertEquals("value7",elements[2].getParameters()[0].getValue()); assertEquals("name8",elements[2].getParameters()[1].getName()); assertEquals(" value8",elements[2].getParameters()[1].getValue()); } public void testParseHEEscaped() { String s = "test1 = \"\\\"stuff\\\"\", test2= \"\\\\\", test3 = \"stuff, stuff\""; HeaderElement[] elements = BasicHeaderValueParser.parseElements(s, null); assertEquals(3, elements.length); assertEquals("test1", elements[0].getName()); assertEquals("\\\"stuff\\\"", elements[0].getValue()); assertEquals("test2", elements[1].getName()); assertEquals("\\\\", elements[1].getValue()); assertEquals("test3", elements[2].getName()); assertEquals("stuff, stuff", elements[2].getValue()); } public void testHEFringeCase1() throws Exception { String headerValue = "name1 = value1,"; HeaderElement[] elements = BasicHeaderValueParser.parseElements(headerValue, null); assertEquals("Number of elements", 1, elements.length); } public void testHEFringeCase2() throws Exception { String headerValue = "name1 = value1, "; HeaderElement[] elements = BasicHeaderValueParser.parseElements(headerValue, null); assertEquals("Number of elements", 1, elements.length); } public void testHEFringeCase3() throws Exception { String headerValue = ",, ,, ,"; HeaderElement[] elements = BasicHeaderValueParser.parseElements(headerValue, null); assertEquals("Number of elements", 0, elements.length); } public void testNVParseUsingCursor() { HeaderValueParser parser = BasicHeaderValueParser.DEFAULT; String s = "test"; CharArrayBuffer buffer = new CharArrayBuffer(16); buffer.append(s); ParserCursor cursor = new ParserCursor(0, s.length()); NameValuePair param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals(null, param.getValue()); assertEquals(s.length(), cursor.getPos()); assertTrue(cursor.atEnd()); s = "test;"; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals(null, param.getValue()); assertEquals(s.length(), cursor.getPos()); assertTrue(cursor.atEnd()); s = "test ,12"; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals(null, param.getValue()); assertEquals(s.length() - 2, cursor.getPos()); assertFalse(cursor.atEnd()); s = "test=stuff"; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals("stuff", param.getValue()); assertEquals(s.length(), cursor.getPos()); assertTrue(cursor.atEnd()); s = " test = stuff "; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals("stuff", param.getValue()); assertEquals(s.length(), cursor.getPos()); assertTrue(cursor.atEnd()); s = " test = stuff ;1234"; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals("stuff", param.getValue()); assertEquals(s.length() - 4, cursor.getPos()); assertFalse(cursor.atEnd()); s = "test = \"stuff\""; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals("stuff", param.getValue()); s = "test = \" stuff\\\"\""; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals(" stuff\\\"", param.getValue()); s = " test"; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("test", param.getName()); assertEquals(null, param.getValue()); s = " "; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("", param.getName()); assertEquals(null, param.getValue()); s = " = stuff "; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); param = parser.parseNameValuePair(buffer, cursor); assertEquals("", param.getName()); assertEquals("stuff", param.getValue()); } public void testNVParse() { String s = "test"; NameValuePair param = BasicHeaderValueParser.parseNameValuePair(s, null); assertEquals("test", param.getName()); assertEquals(null, param.getValue()); s = "test=stuff"; param = BasicHeaderValueParser.parseNameValuePair(s, null); assertEquals("test", param.getName()); assertEquals("stuff", param.getValue()); s = " test = stuff "; param = BasicHeaderValueParser.parseNameValuePair(s, null); assertEquals("test", param.getName()); assertEquals("stuff", param.getValue()); s = "test = \"stuff\""; param = BasicHeaderValueParser.parseNameValuePair(s, null); assertEquals("test", param.getName()); assertEquals("stuff", param.getValue()); s = "test = \" stuff\\\"\""; param = BasicHeaderValueParser.parseNameValuePair(s, null); assertEquals("test", param.getName()); assertEquals(" stuff\\\"", param.getValue()); s = " test"; param = BasicHeaderValueParser.parseNameValuePair(s, null); assertEquals("test", param.getName()); assertEquals(null, param.getValue()); s = " "; param = BasicHeaderValueParser.parseNameValuePair(s, null); assertEquals("", param.getName()); assertEquals(null, param.getValue()); s = " = stuff "; param = BasicHeaderValueParser.parseNameValuePair(s, null); assertEquals("", param.getName()); assertEquals("stuff", param.getValue()); } public void testNVParseAllWithCursor() { HeaderValueParser parser = BasicHeaderValueParser.DEFAULT; String s = "test; test1 = stuff ; test2 = \"stuff; stuff\"; test3=\"stuff"; CharArrayBuffer buffer = new CharArrayBuffer(16); buffer.append(s); ParserCursor cursor = new ParserCursor(0, s.length()); NameValuePair[] params = parser.parseParameters(buffer, cursor); assertEquals("test", params[0].getName()); assertEquals(null, params[0].getValue()); assertEquals("test1", params[1].getName()); assertEquals("stuff", params[1].getValue()); assertEquals("test2", params[2].getName()); assertEquals("stuff; stuff", params[2].getValue()); assertEquals("test3", params[3].getName()); assertEquals("\"stuff", params[3].getValue()); assertEquals(s.length(), cursor.getPos()); assertTrue(cursor.atEnd()); s = "test; test1 = stuff ; test2 = \"stuff; stuff\"; test3=\"stuff\",123"; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); params = parser.parseParameters(buffer, cursor); assertEquals("test", params[0].getName()); assertEquals(null, params[0].getValue()); assertEquals("test1", params[1].getName()); assertEquals("stuff", params[1].getValue()); assertEquals("test2", params[2].getName()); assertEquals("stuff; stuff", params[2].getValue()); assertEquals("test3", params[3].getName()); assertEquals("stuff", params[3].getValue()); assertEquals(s.length() - 3, cursor.getPos()); assertFalse(cursor.atEnd()); s = " "; buffer = new CharArrayBuffer(16); buffer.append(s); cursor = new ParserCursor(0, s.length()); params = parser.parseParameters(buffer, cursor); assertEquals(0, params.length); } public void testNVParseAll() { String s = "test; test1 = stuff ; test2 = \"stuff; stuff\"; test3=\"stuff"; NameValuePair[] params = BasicHeaderValueParser.parseParameters(s, null); assertEquals("test", params[0].getName()); assertEquals(null, params[0].getValue()); assertEquals("test1", params[1].getName()); assertEquals("stuff", params[1].getValue()); assertEquals("test2", params[2].getName()); assertEquals("stuff; stuff", params[2].getValue()); assertEquals("test3", params[3].getName()); assertEquals("\"stuff", params[3].getValue()); s = " "; params = BasicHeaderValueParser.parseParameters(s, null); assertEquals(0, params.length); } public void testNVParseEscaped() { String s = "test1 = \"\\\"stuff\\\"\"; test2= \"\\\\\"; test3 = \"stuff; stuff\""; NameValuePair[] params = BasicHeaderValueParser.parseParameters(s, null); assertEquals(3, params.length); assertEquals("test1", params[0].getName()); assertEquals("\\\"stuff\\\"", params[0].getValue()); assertEquals("test2", params[1].getName()); assertEquals("\\\\", params[1].getValue()); assertEquals("test3", params[2].getName()); assertEquals("stuff; stuff", params[2].getValue()); } }