You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ro...@apache.org on 2007/08/21 11:55:14 UTC

svn commit: r568044 - in /jakarta/httpcomponents/httpcore/trunk/module-main/src: main/java/org/apache/http/message/ test/java/org/apache/http/message/

Author: rolandw
Date: Tue Aug 21 02:55:13 2007
New Revision: 568044

URL: http://svn.apache.org/viewvc?rev=568044&view=rev
Log:
removed static parsing code from BasicNameValuePair, adjusted test cases

Modified:
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderValueParser.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderValueParser.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestBasicHeaderValueParser.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderValueParser.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderValueParser.java?rev=568044&r1=568043&r2=568044&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderValueParser.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderValueParser.java Tue Aug 21 02:55:13 2007
@@ -300,6 +300,33 @@
 
 
     /**
+     * Parses a name-value-pair with the given parser.
+     *
+     * @param value     the NVP to parse
+     * @param parser    the parser to use, or <code>null</code> for default
+     *
+     * @return  the parsed name-value pair
+     */
+    public final static
+       NameValuePair parseNameValuePair(String value,
+                                        HeaderValueParser parser)
+        throws ParseException {
+
+        if (value == null) {
+            throw new IllegalArgumentException
+                ("Value to parse may not be null.");
+        }
+
+        if (parser == null)
+            parser = BasicHeaderValueParser.DEFAULT;
+
+        CharArrayBuffer buffer = new CharArrayBuffer(value.length());
+        buffer.append(value);
+        return parser.parseNameValuePair(buffer, 0, buffer.length());
+    }
+
+
+    /**
      * Parses a name=value specification, where the = and value are optional.
      *
      * @param buffer    the buffer holding the name-value pair to parse
@@ -307,9 +334,9 @@
      * @return  the name-value pair, where the value is <code>null</code>
      *          if no value is specified
      */
-    protected NameValuePair parseNameValuePair(final CharArrayBuffer buffer,
-                                               final int indexFrom,
-                                               final int indexTo) {
+    public NameValuePair parseNameValuePair(final CharArrayBuffer buffer,
+                                            final int indexFrom,
+                                            final int indexTo) {
 
         if (buffer == null) {
             throw new IllegalArgumentException
@@ -354,7 +381,7 @@
 
     /**
      * Creates a name-value pair.
-     * Called from {@link #parseNameValuePair}.
+     * Called from {@link #parseNameValue}.
      *
      * @param name      the name
      * @param value     the value, or <code>null</code>

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java?rev=568044&r1=568043&r2=568044&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java Tue Aug 21 02:55:13 2007
@@ -145,107 +145,6 @@
         return this.value;
     }
 
-    public static final NameValuePair[] parseAll(
-            final CharArrayBuffer buffer, final int indexFrom, final int indexTo) {
-        if (buffer == null) {
-            throw new IllegalArgumentException("Char array buffer may not be null");
-        }
-        if (indexFrom < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-        if (indexTo > buffer.length()) {
-            throw new IndexOutOfBoundsException();
-        }
-        if (indexFrom > indexTo) {
-            throw new IndexOutOfBoundsException();
-        }
-        List params = new ArrayList(); 
-        int cur = indexFrom;
-        int from = indexFrom;
-        boolean qouted = false;
-        boolean escaped = false;
-        while (cur < indexTo) {
-            char ch = buffer.charAt(cur);
-            if (ch == '"' && !escaped) {
-                qouted = !qouted;
-            }
-            NameValuePair param = null;
-            if (!qouted && ch == ';') {
-                param = parse(buffer, from, cur);
-                from = cur + 1;
-            } else if (cur == indexTo - 1) {
-                param = parse(buffer, from, indexTo);
-            }
-            if (param != null && !(param.getName().length() == 0 && param.getValue() == null)) {
-                params.add(param);
-            }
-            if (escaped) {
-                escaped = false;
-            } else {
-                escaped = qouted && ch == '\\';
-            }
-            cur++;
-        }
-        return (NameValuePair[]) params.toArray(new NameValuePair[params.size()]);
-    }
-    
-    public static final NameValuePair[] parseAll(final String s) {
-        if (s == null) {
-            throw new IllegalArgumentException("String may not be null");
-        }
-        CharArrayBuffer buffer = new CharArrayBuffer(s.length());
-        buffer.append(s);
-        return parseAll(buffer, 0, buffer.length());
-    }
-
-    public static NameValuePair parse(
-            final CharArrayBuffer buffer, final int indexFrom, final int indexTo) {
-        if (buffer == null) {
-            throw new IllegalArgumentException("Char array buffer may not be null");
-        }
-        if (indexFrom < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-        if (indexTo > buffer.length()) {
-            throw new IndexOutOfBoundsException();
-        }
-        if (indexFrom > indexTo) {
-            throw new IndexOutOfBoundsException();
-        }
-        int eq = buffer.indexOf('=', indexFrom, indexTo);
-        if (eq < 0) {
-            return new BasicNameValuePair(buffer.substringTrimmed(indexFrom, indexTo), null);
-        }
-        String name = buffer.substringTrimmed(indexFrom, eq);
-        int i1 = eq + 1;
-        int i2 = indexTo;
-        // Trim leading white spaces
-        while (i1 < i2 && (HTTP.isWhitespace(buffer.charAt(i1)))) {
-            i1++;
-        }
-        // Trim trailing white spaces
-        while ((i2 > i1) && (HTTP.isWhitespace(buffer.charAt(i2 - 1)))) {
-            i2--;
-        }
-        // Strip away quotes if necessary
-        if (((i2 - i1) >= 2) 
-            && (buffer.charAt(i1) == '"') 
-            && (buffer.charAt(i2 - 1) == '"')) {
-            i1++;
-            i2--;
-        }
-        String value = buffer.substring(i1, i2);
-        return new BasicNameValuePair(name, value);
-    }
-
-    public static final NameValuePair parse(final String s) {
-        if (s == null) {
-            throw new IllegalArgumentException("String may not be null");
-        }
-        CharArrayBuffer buffer = new CharArrayBuffer(s.length());
-        buffer.append(s);
-        return parse(buffer, 0, buffer.length());
-    }
 
     /**
      * Special characters that can be used as separators in HTTP parameters.

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderValueParser.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderValueParser.java?rev=568044&r1=568043&r2=568044&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderValueParser.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderValueParser.java Tue Aug 21 02:55:13 2007
@@ -197,5 +197,22 @@
         throws ParseException
         ;
 
+
+    /**
+     * Parses a name=value specification, where the = and value are optional.
+     *
+     * @param buffer    the buffer holding the name-value pair to parse
+     *
+     * @return  the name-value pair, where the value is <code>null</code>
+     *          if no value is specified
+     *
+     * @throws ParseException        in case of a parse error
+     */
+    NameValuePair parseNameValuePair(CharArrayBuffer buffer,
+                                     int indexFrom,
+                                     int indexTo)
+        throws ParseException
+        ;
+
 }
 

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestBasicHeaderValueParser.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestBasicHeaderValueParser.java?rev=568044&r1=568043&r2=568044&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestBasicHeaderValueParser.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestBasicHeaderValueParser.java Tue Aug 21 02:55:13 2007
@@ -101,7 +101,7 @@
         assertEquals(" value8",elements[2].getParameters()[1].getValue());
     }
 
-    public void testParseEscaped() {
+    public void testParseHEEscaped() {
         String s = 
           "test1 =  \"\\\"stuff\\\"\", test2= \"\\\\\", test3 = \"stuff, stuff\"";
         HeaderElement[] elements = BasicHeaderValueParser.parseElements(s, null);
@@ -114,25 +114,25 @@
         assertEquals("stuff, stuff", elements[2].getValue());
     }
 
-    public void testFringeCase1() throws Exception {
+    public void testHEFringeCase1() throws Exception {
         String headerValue = "name1 = value1,";
         HeaderElement[] elements = BasicHeaderValueParser.parseElements(headerValue, null);
         assertEquals("Number of elements", 1, elements.length);
     }
 
-    public void testFringeCase2() throws Exception {
+    public void testHEFringeCase2() throws Exception {
         String headerValue = "name1 = value1, ";
         HeaderElement[] elements = BasicHeaderValueParser.parseElements(headerValue, null);
         assertEquals("Number of elements", 1, elements.length);
     }
 
-    public void testFringeCase3() throws Exception {
+    public void testHEFringeCase3() throws Exception {
         String headerValue = ",, ,, ,";
         HeaderElement[] elements = BasicHeaderValueParser.parseElements(headerValue, null);
         assertEquals("Number of elements", 0, elements.length);
     }
 
-    public void testInvalidInput() throws Exception {
+    public void testHEInvalidInput() throws Exception {
         CharArrayBuffer buffer = new CharArrayBuffer(32);
         buffer.append("name = value");
         try {
@@ -188,6 +188,151 @@
         }
         try {
             BasicHeaderValueParser.DEFAULT.parseHeaderElement(buffer, 2, 1);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IndexOutOfBoundsException ex) {
+            // expected
+        }
+    }
+
+
+    
+    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 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());
+    }
+
+    public void testNVParseInvalidInput() throws Exception {
+        CharArrayBuffer buffer = new CharArrayBuffer(32);
+        buffer.append("name = value");
+
+        try {
+            BasicHeaderValueParser.parseParameters(null, null);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IllegalArgumentException ex) {
+            // expected
+        }
+        try {
+            BasicHeaderValueParser.DEFAULT.parseParameters(null, 0, 0);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IllegalArgumentException ex) {
+            // expected
+        }
+        try {
+            BasicHeaderValueParser.DEFAULT.parseParameters(buffer, -1, 0);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IndexOutOfBoundsException ex) {
+            // expected
+        }
+        try {
+            BasicHeaderValueParser.DEFAULT.parseParameters(buffer, 0, 1000);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IndexOutOfBoundsException ex) {
+            // expected
+        }
+        try {
+            BasicHeaderValueParser.DEFAULT.parseParameters(buffer, 2, 1);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IndexOutOfBoundsException ex) {
+            // expected
+        }
+
+        try {
+            BasicHeaderValueParser.parseNameValuePair(null, null);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IllegalArgumentException ex) {
+            // expected
+        }
+        try {
+            BasicHeaderValueParser.DEFAULT.parseNameValuePair(null, 0, 0);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IllegalArgumentException ex) {
+            // expected
+        }
+        try {
+            BasicHeaderValueParser.DEFAULT.parseNameValuePair(buffer, -1, 0);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IndexOutOfBoundsException ex) {
+            // expected
+        }
+        try {
+            BasicHeaderValueParser.DEFAULT.parseNameValuePair(buffer, 0, 1000);
+            fail("IllegalArgumentException should have been thrown");
+        } catch (IndexOutOfBoundsException ex) {
+            // expected
+        }
+        try {
+            BasicHeaderValueParser.DEFAULT.parseNameValuePair(buffer, 2, 1);
             fail("IllegalArgumentException should have been thrown");
         } catch (IndexOutOfBoundsException ex) {
             // expected

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java?rev=568044&r1=568043&r2=568044&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java Tue Aug 21 02:55:13 2007
@@ -100,144 +100,6 @@
         NameValuePair param2 = new BasicNameValuePair("name1", null);
         assertEquals("name1", param2.toString());
     }
-    
-    public void testParse() {
-        String s = "test";
-        NameValuePair param = BasicNameValuePair.parse(s);
-        assertEquals("test", param.getName());
-        assertEquals(null, param.getValue());
-
-        s = "test=stuff";
-        param = BasicNameValuePair.parse(s);
-        assertEquals("test", param.getName());
-        assertEquals("stuff", param.getValue());
-        
-        s = "   test  =   stuff ";
-        param = BasicNameValuePair.parse(s);
-        assertEquals("test", param.getName());
-        assertEquals("stuff", param.getValue());
-        
-        s = "test  = \"stuff\"";
-        param = BasicNameValuePair.parse(s);
-        assertEquals("test", param.getName());
-        assertEquals("stuff", param.getValue());
-        
-        s = "test  = \"  stuff\\\"\"";
-        param = BasicNameValuePair.parse(s);
-        assertEquals("test", param.getName());
-        assertEquals("  stuff\\\"", param.getValue());
-        
-        s = "  test";
-        param = BasicNameValuePair.parse(s);
-        assertEquals("test", param.getName());
-        assertEquals(null, param.getValue());
-
-        s = "  ";
-        param = BasicNameValuePair.parse(s);
-        assertEquals("", param.getName());
-        assertEquals(null, param.getValue());
-
-        s = " = stuff ";
-        param = BasicNameValuePair.parse(s);
-        assertEquals("", param.getName());
-        assertEquals("stuff", param.getValue());
-    }
-
-    public void testParseAll() {
-        String s = 
-          "test; test1 =  stuff   ; test2 =  \"stuff; stuff\"; test3=\"stuff";
-        NameValuePair[] params = BasicNameValuePair.parseAll(s);
-        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 = BasicNameValuePair.parseAll(s);
-        assertEquals(0, params.length);
-    }
-
-    public void testParseEscaped() {
-        String s = 
-          "test1 =  \"\\\"stuff\\\"\"; test2= \"\\\\\"; test3 = \"stuff; stuff\"";
-        NameValuePair[] params = BasicNameValuePair.parseAll(s);
-        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());
-    }
-
-    public void testParseInvalidInput() throws Exception {
-        CharArrayBuffer buffer = new CharArrayBuffer(32);
-        buffer.append("name = value");
-        try {
-            BasicNameValuePair.parseAll(null, 0, 0);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IllegalArgumentException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parseAll(null);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IllegalArgumentException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parseAll(buffer, -1, 0);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IndexOutOfBoundsException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parseAll(buffer, 0, 1000);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IndexOutOfBoundsException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parseAll(buffer, 2, 1);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IndexOutOfBoundsException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parse(null, 0, 0);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IllegalArgumentException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parse(null);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IllegalArgumentException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parse(buffer, -1, 0);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IndexOutOfBoundsException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parse(buffer, 0, 1000);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IndexOutOfBoundsException ex) {
-            // expected
-        }
-        try {
-            BasicNameValuePair.parse(buffer, 2, 1);
-            fail("IllegalArgumentException should have been thrown");
-        } catch (IndexOutOfBoundsException ex) {
-            // expected
-        }
-    }
 
     public void testBasicFormatting() throws Exception {
         NameValuePair param1 = new BasicNameValuePair("param", "regular_stuff");