hc-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ol...@apache.org
Subject svn commit: r645071 - in /httpcomponents/httpclient/trunk/module-client/src: examples/org/apache/http/examples/client/ main/java/org/apache/http/client/methods/ main/java/org/apache/http/client/utils/ test/java/org/apache/http/client/utils/
Date Sat, 05 Apr 2008 10:53:09 GMT
Author: olegk
Date: Sat Apr  5 03:53:05 2008
New Revision: 645071

URL: http://svn.apache.org/viewvc?rev=645071&view=rev
Log:
HTTPCLIENT-746: Refactored URLUtils into URLEncodedUtils and URIUtils
Contributed by Stojce Dimski <sdmiski at yahoo.it>
Reviewed by Oleg Kalnichevski

Added:
    httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
  (with props)
    httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/
    httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestAllUtils.java
  (with props)
    httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
  (with props)
Modified:
    httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientFormLogin.java
    httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/methods/UrlEncodedFormEntity.java
    httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLUtils.java

Modified: httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientFormLogin.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientFormLogin.java?rev=645071&r1=645070&r2=645071&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientFormLogin.java
(original)
+++ httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientFormLogin.java
Sat Apr  5 03:53:05 2008
@@ -29,8 +29,8 @@
 
 package org.apache.http.examples.client;
 
+import java.util.ArrayList;
 import java.util.List;
-
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.NameValuePair;
@@ -45,7 +45,7 @@
 import org.apache.http.protocol.HTTP;
 
 /**
- * A example that demonstrates how HttpClient APIs can be used to perform 
+ * A example that demonstrates how HttpClient APIs can be used to perform
  * form-based logon.
  */
 public class ClientFormLogin {
@@ -60,48 +60,47 @@
 
         HttpResponse response = httpclient.execute(httpget);
         HttpEntity entity = response.getEntity();
-        
-        System.out.println("Login form get: " + response.getStatusLine()); 
+
+        System.out.println("Login form get: " + response.getStatusLine());
         if (entity != null) {
             entity.consumeContent();
         }
-        System.out.println("Initial set of cookies:");    
+        System.out.println("Initial set of cookies:");
         List<Cookie> cookies = httpclient.getCookieStore().getCookies();
         if (cookies.isEmpty()) {
-            System.out.println("None");    
+            System.out.println("None");
         } else {
             for (int i = 0; i < cookies.size(); i++) {
-                System.out.println("- " + cookies.get(i).toString());    
+                System.out.println("- " + cookies.get(i).toString());
             }
         }
-        
+
         HttpPost httpost = new HttpPost("https://portal.sun.com/amserver/UI/Login?" +
                 "org=self_registered_users&" +
                 "goto=/portal/dt&" +
                 "gotoOnFail=/portal/dt?error=true");
-        
-        NameValuePair[] nvps = new NameValuePair[] {
-                new BasicNameValuePair("IDToken1", "username"),
-                new BasicNameValuePair("IDToken2", "password")
-        };
-        
+
+        List <NameValuePair> nvps = new ArrayList <NameValuePair>();
+        nvps.add(new BasicNameValuePair("IDToken1", "username"));
+        nvps.add(new BasicNameValuePair("IDToken2", "password"));
+
         httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
-        
+
         response = httpclient.execute(httpost);
         entity = response.getEntity();
-        
-        System.out.println("Login form get: " + response.getStatusLine()); 
+
+        System.out.println("Login form get: " + response.getStatusLine());
         if (entity != null) {
             entity.consumeContent();
         }
-        
-        System.out.println("Post logon cookies:");    
+
+        System.out.println("Post logon cookies:");
         cookies = httpclient.getCookieStore().getCookies();
         if (cookies.isEmpty()) {
-            System.out.println("None");    
+            System.out.println("None");
         } else {
             for (int i = 0; i < cookies.size(); i++) {
-                System.out.println("- " + cookies.get(i).toString());    
+                System.out.println("- " + cookies.get(i).toString());
             }
         }
     }

Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/methods/UrlEncodedFormEntity.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/methods/UrlEncodedFormEntity.java?rev=645071&r1=645070&r2=645071&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/methods/UrlEncodedFormEntity.java
(original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/methods/UrlEncodedFormEntity.java
Sat Apr  5 03:53:05 2008
@@ -1,5 +1,5 @@
 /*
- * $Header$
+ * $HeadURL$
  * $Revision$
  * $Date$
  *
@@ -32,43 +32,26 @@
 
 import java.io.UnsupportedEncodingException;
 import java.util.List;
-import java.util.Map;
-
 import org.apache.http.NameValuePair;
-import org.apache.http.client.utils.URLUtils;
+import org.apache.http.client.utils.URLEncodedUtils;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.protocol.HTTP;
 
 public class UrlEncodedFormEntity extends StringEntity {
-
-    /** The Content-Type for www-form-urlencoded. */
-    public static final String FORM_URL_ENCODED_CONTENT_TYPE = 
-        "application/x-www-form-urlencoded";
-
-    public UrlEncodedFormEntity(
-            final NameValuePair[] fields, 
-            final String charset) throws UnsupportedEncodingException {
-        super(URLUtils.formUrlEncode(fields, charset), charset);
-        setContentType(FORM_URL_ENCODED_CONTENT_TYPE);
-    }
-    
-    public UrlEncodedFormEntity(
-            final NameValuePair[] fields) throws UnsupportedEncodingException {
-        super(URLUtils.formUrlEncode(fields, HTTP.UTF_8), HTTP.US_ASCII);
-        setContentType(FORM_URL_ENCODED_CONTENT_TYPE);
-    }
-    
+  
     public UrlEncodedFormEntity (
-            final Map<String, List<String>> parameters, 
-            final String charset) throws UnsupportedEncodingException {
-        super(URLUtils.format(parameters, charset), HTTP.US_ASCII);
-        setContentType(FORM_URL_ENCODED_CONTENT_TYPE);
+        final List <NameValuePair> parameters, 
+        final String encoding) throws UnsupportedEncodingException {
+        super(URLEncodedUtils.format(parameters, encoding), 
+            encoding);
+        setContentType(URLEncodedUtils.CONTENT_TYPE);
     }
-    
+
     public UrlEncodedFormEntity (
-            final Map<String, List<String>> parameters) throws UnsupportedEncodingException
{
-        super(URLUtils.format(parameters, HTTP.UTF_8), HTTP.US_ASCII);
-        setContentType(FORM_URL_ENCODED_CONTENT_TYPE);
+        final List <NameValuePair> parameters) throws UnsupportedEncodingException
{
+        super(URLEncodedUtils.format(parameters, HTTP.DEFAULT_CONTENT_CHARSET), 
+            HTTP.DEFAULT_CONTENT_CHARSET);
+        setContentType(URLEncodedUtils.CONTENT_TYPE);
     }
     
 }

Added: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java?rev=645071&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
(added)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
Sat Apr  5 03:53:05 2008
@@ -0,0 +1,138 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ * ====================================================================
+ * 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/>.
+ *
+ */
+
+package org.apache.http.client.utils;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Scanner;
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
+
+public class URLEncodedUtils {
+
+    public static final String CONTENT_TYPE = "application/x-www-form-urlencoded";
+    private static final String PARAMETER_SEPARATOR = "&";
+    private static final String NAME_VALUE_SEPARATOR = "=";
+
+    public static List <NameValuePair> parse (final URI uri, final String encoding)
{
+        List <NameValuePair> result = Collections.emptyList();
+        final String query = uri.getRawQuery();
+        if (query != null && query.length() > 0) {
+            result = new ArrayList <NameValuePair>();
+            parse(result, new Scanner(query), encoding);
+        }
+        return result;
+    }
+
+    public static List <NameValuePair> parse (
+            final HttpEntity entity) throws IOException {
+        List <NameValuePair> result = Collections.emptyList();
+        if (isEncoded(entity)) {
+            final String content = EntityUtils.toString(entity);
+            final Header encoding = entity.getContentEncoding();
+            if (content != null && content.length() > 0) {
+                result = new ArrayList <NameValuePair>();
+                parse(result, new Scanner(content), 
+                        encoding != null ? encoding.getValue() : null);
+            }
+        }
+        return result;
+    }
+
+    public static boolean isEncoded (final HttpEntity entity) {
+        final Header contentType = entity.getContentType();
+        return (contentType != null && contentType.getValue().equalsIgnoreCase(CONTENT_TYPE));
+    }
+
+    public static void parse (
+            final List <NameValuePair> parameters, 
+            final Scanner scanner, 
+            final String encoding) {
+        scanner.useDelimiter(PARAMETER_SEPARATOR);
+        while (scanner.hasNext()) {
+            final String[] nameValue = scanner.next().split(NAME_VALUE_SEPARATOR);
+            if (nameValue.length == 0 || nameValue.length > 2)
+                throw new IllegalArgumentException("bad parameter");
+
+            final String name = decode(nameValue[0], encoding);
+            String value = null;
+            if (nameValue.length == 2)
+                value = decode(nameValue[1], encoding);
+            parameters.add(new BasicNameValuePair(name, value));
+        }
+    }
+
+    public static String format (
+            final List <NameValuePair> parameters, 
+            final String encoding) {
+        final StringBuilder result = new StringBuilder();
+        for (final NameValuePair parameter : parameters) {
+            final String encodedName = encode(parameter.getName(), encoding);
+            final String value = parameter.getValue();
+            final String encodedValue = value != null ? encode(value, encoding) : "";
+            if (result.length() > 0)
+                result.append(PARAMETER_SEPARATOR);
+            result.append(encodedName);
+            result.append(NAME_VALUE_SEPARATOR);
+            result.append(encodedValue);
+        }
+        return result.toString();
+    }
+
+    private static String decode (final String content, final String encoding) {
+        try {
+            return URLDecoder.decode(content, 
+                    encoding != null ? encoding : HTTP.DEFAULT_CONTENT_CHARSET);
+        } catch (UnsupportedEncodingException problem) {
+            throw new IllegalArgumentException(problem);
+        }
+    }
+
+    private static String encode (final String content, final String encoding) {
+        try {
+            return URLEncoder.encode(content, 
+                    encoding != null ? encoding : HTTP.DEFAULT_CONTENT_CHARSET);
+        } catch (UnsupportedEncodingException problem) {
+            throw new IllegalArgumentException(problem);
+        }
+    }
+    
+}

Propchange: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLUtils.java?rev=645071&r1=645070&r2=645071&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLUtils.java
(original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URLUtils.java
Sat Apr  5 03:53:05 2008
@@ -29,169 +29,12 @@
  */
 package org.apache.http.client.utils;
 
-import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Scanner;
-import java.util.TreeMap;
 
 import org.apache.http.HttpHost;
-import org.apache.http.NameValuePair;
-import org.apache.http.protocol.HTTP;
 
-/**
- * The home for utility methods that handle various URL encoding tasks.
- * 
- * @author Michael Becke
- * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
- * 
- * @since 4.0
- */
 public class URLUtils {
-
-    /** Default content encoding chatset */
-    private static final String DEFAULT_CHARSET = "ISO-8859-1";
-    private static final String PARAMETER_SEPARATOR = "&";
-    private static final String NAME_VALUE_SEPARATOR = "=";
-
-    /**
-     * Form-urlencoding routine.
-     *
-     * The default encoding for all forms is `application/x-www-form-urlencoded'. 
-     * A form data set is represented in this media type as follows:
-     *
-     * The form field names and values are escaped: space characters are replaced 
-     * by `+', and then reserved characters are escaped as per [URL]; that is, 
-     * non-alphanumeric characters are replaced by `%HH', a percent sign and two 
-     * hexadecimal digits representing the ASCII code of the character. Line breaks, 
-     * as in multi-line text field values, are represented as CR LF pairs, i.e. `%0D%0A'.
-     * 
-     * <p>
-     * if the given charset is not supported, ISO-8859-1 is used instead.
-     * </p>
-     * 
-     * @param pairs the values to be encoded
-     * @param charset the character set of pairs to be encoded
-     * 
-     * @return the urlencoded pairs
-     */
-     public static String simpleFormUrlEncode(
-             final NameValuePair[] pairs, 
-             final String charset) {
-        try {
-            return formUrlEncode(pairs, charset);
-        } catch (UnsupportedEncodingException e) {
-            try {
-                return formUrlEncode(pairs, DEFAULT_CHARSET);
-            } catch (UnsupportedEncodingException fatal) {
-                // Should never happen. ISO-8859-1 must be supported on all JVMs
-                throw new Error("HttpClient requires " + DEFAULT_CHARSET + " support");
-            }
-        }
-    }
-
-    /**
-     * Form-urlencoding routine.
-     *
-     * The default encoding for all forms is `application/x-www-form-urlencoded'. 
-     * A form data set is represented in this media type as follows:
-     *
-     * The form field names and values are escaped: space characters are replaced 
-     * by `+', and then reserved characters are escaped as per [URL]; that is, 
-     * non-alphanumeric characters are replaced by `%HH', a percent sign and two 
-     * hexadecimal digits representing the ASCII code of the character. Line breaks, 
-     * as in multi-line text field values, are represented as CR LF pairs, i.e. `%0D%0A'.
-     * 
-     * @param pairs the values to be encoded
-     * @param charset the character set of pairs to be encoded
-     * 
-     * @return the urlencoded pairs
-     * @throws UnsupportedEncodingException if charset is not supported
-     */
-     public static String formUrlEncode(
-             final NameValuePair[] pairs, 
-             final String charset) throws UnsupportedEncodingException {
-        StringBuilder buf = new StringBuilder();
-        for (int i = 0; i < pairs.length; i++) {
-            NameValuePair pair = pairs[i];
-            if (pair.getName() != null) {
-                if (i > 0) {
-                    buf.append("&");
-                }
-                buf.append(URLEncoder.encode(pair.getName(), charset));
-                buf.append("=");
-                if (pair.getValue() != null) {
-                    buf.append(URLEncoder.encode(pair.getValue(), charset));
-                }
-            }
-        }
-        return buf.toString();
-    }
-    
-     public static Map <String, List <String>> parse (
-             final URI uri, 
-             String charset) throws UnsupportedEncodingException {
-         Map <String, List <String>> result = Collections.emptyMap();
-         final String query = uri.getRawQuery();
-         if (query != null && query.length() > 0) {
-             result = new TreeMap <String, List <String>>();
-             parse(result, new Scanner(query), charset);
-         }
-         return result;
-     }
-
-     public static void parse (
-             final Map <String, List <String>> result, 
-             final Scanner scanner, String charset) throws UnsupportedEncodingException {
-         if (charset == null) {
-             charset = HTTP.DEFAULT_CONTENT_CHARSET;
-         }
-         scanner.useDelimiter(PARAMETER_SEPARATOR);
-         while (scanner.hasNext()) {
-             final String[] nameValue = scanner.next().split(NAME_VALUE_SEPARATOR);
-             if (nameValue.length == 0 || nameValue.length > 2)
-                 throw new IllegalArgumentException("bad parameter");
-             final String name = URLDecoder.decode(nameValue[0], charset);
-             if (nameValue.length == 2) {
-                 if (!result.containsKey(name))
-                     result.put(name, new LinkedList <String>());
-                 String value = null;
-                 final List <String> values = result.get(name);
-                 value = URLDecoder.decode(nameValue[1], charset);
-                 values.add(value);
-             }
-         }
-     }
-
-     public static String format (
-             final Map <String, List <String>> parameters, 
-             String charset) throws UnsupportedEncodingException {
-         if (charset == null) {
-             charset = HTTP.DEFAULT_CONTENT_CHARSET;
-         }
-         final StringBuilder result = new StringBuilder(64);
-         for (final String name : parameters.keySet()) {
-             final List <? extends String> values = parameters.get(name);
-             if (values != null) {
-                 final String encodedName = URLEncoder.encode(name, charset);
-                 for (final String value : values) {
-                     if (result.length() > 0)
-                         result.append(PARAMETER_SEPARATOR);
-                     final String encodedValue = URLEncoder.encode(value, charset);
-                     result.append(encodedName);
-                     result.append(NAME_VALUE_SEPARATOR);
-                     result.append(encodedValue);
-                 }
-             }
-         }
-         return result.toString();
-     }
 
      public static URI createURI(
             final String scheme,

Added: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestAllUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestAllUtils.java?rev=645071&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestAllUtils.java
(added)
+++ httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestAllUtils.java
Sat Apr  5 03:53:05 2008
@@ -0,0 +1,54 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ * ====================================================================
+ * 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/>.
+ *
+ */
+
+package org.apache.http.client.utils;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+public class TestAllUtils extends TestCase {
+
+    public TestAllUtils(String testName) {
+        super(testName);
+    }
+
+    public static Test suite() {
+        TestSuite suite = new TestSuite();
+        suite.addTest(TestURLEncodedUtils.suite());
+        return suite;
+    }
+
+    public static void main(String args[]) {
+        String[] testCaseName = { TestAllUtils.class.getName() };
+        junit.textui.TestRunner.main(testCaseName);
+    }
+
+}

Propchange: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestAllUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestAllUtils.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestAllUtils.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java?rev=645071&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
(added)
+++ httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
Sat Apr  5 03:53:05 2008
@@ -0,0 +1,180 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ * ====================================================================
+ * 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/>.
+ *
+ */
+
+package org.apache.http.client.utils;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.http.NameValuePair;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.message.BasicNameValuePair;
+
+public class TestURLEncodedUtils extends TestCase {
+  
+    public TestURLEncodedUtils(final String testName) throws IOException {
+        super(testName);
+    }
+
+    public static void main(String args[]) {
+        String[] testCaseName = { TestURLEncodedUtils.class.getName() };
+        junit.textui.TestRunner.main(testCaseName);
+    }
+
+    public static Test suite() {
+        return new TestSuite(TestURLEncodedUtils.class);
+    }
+    
+    public void testParseURI () throws Exception {
+        List <NameValuePair> result;
+
+        result = parse("", null);
+        assertTrue(result.isEmpty());
+
+        result = parse("Name1=Value1", null);
+        assertEquals(1, result.size());
+        assertNameValuePair(result.get(0), "Name1", "Value1");
+
+        result = parse("Name2=", null);
+        assertEquals(1, result.size());
+        assertNameValuePair(result.get(0), "Name2", null);
+
+        result = parse("Name3", null);
+        assertEquals(1, result.size());
+        assertNameValuePair(result.get(0), "Name3", null);
+
+        result = parse("Name4=Value+4%21", null);
+        assertEquals(1, result.size());
+        assertNameValuePair(result.get(0), "Name4", "Value 4!");
+
+        result = parse("Name4=Value%2B4%21", null);
+        assertEquals(1, result.size());
+        assertNameValuePair(result.get(0), "Name4", "Value+4!");
+
+        result = parse("Name4=Value+4%21+%214", null);
+        assertEquals(1, result.size());
+        assertNameValuePair(result.get(0), "Name4", "Value 4! !4");
+
+        result = parse("Name5=aaa&Name6=bbb", null);
+        assertEquals(2, result.size());
+        assertNameValuePair(result.get(0), "Name5", "aaa");
+        assertNameValuePair(result.get(1), "Name6", "bbb");
+
+        result = parse("Name7=aaa&Name7=b%2Cb&Name7=ccc", null);
+        assertEquals(3, result.size());
+        assertNameValuePair(result.get(0), "Name7", "aaa");
+        assertNameValuePair(result.get(1), "Name7", "b,b");
+        assertNameValuePair(result.get(2), "Name7", "ccc");
+
+        result = parse("Name8=xx%2C++yy++%2Czz", null);
+        assertEquals(1, result.size());
+        assertNameValuePair(result.get(0), "Name8", "xx,  yy  ,zz");
+    }
+
+    public void testParseEntity () throws Exception {
+        final StringEntity entity = new StringEntity("Name1=Value1", null);
+
+        entity.setContentType(URLEncodedUtils.CONTENT_TYPE);
+        final List <NameValuePair> result = URLEncodedUtils.parse(entity);
+        assertEquals(1, result.size());
+        assertNameValuePair(result.get(0), "Name1", "Value1");
+
+        entity.setContentType("text/test");
+        assertTrue(URLEncodedUtils.parse(entity).isEmpty());
+    }
+
+    public void testIsEncoded () throws Exception {
+        final StringEntity entity = new StringEntity("...", null);
+
+        entity.setContentType(URLEncodedUtils.CONTENT_TYPE);
+        assertTrue(URLEncodedUtils.isEncoded(entity));
+
+        entity.setContentType("text/test");
+        assertFalse(URLEncodedUtils.isEncoded(entity));
+    }
+
+    public void testFormat () throws Exception {
+        final List <NameValuePair> params = new ArrayList <NameValuePair>();
+        assertEquals(0, URLEncodedUtils.format(params, null).length());
+
+        params.clear();
+        params.add(new BasicNameValuePair("Name1", "Value1"));
+        assertEquals("Name1=Value1", URLEncodedUtils.format(params, null));
+
+        params.clear();
+        params.add(new BasicNameValuePair("Name2", null));
+        assertEquals("Name2=", URLEncodedUtils.format(params, null));
+
+        params.clear();
+        params.add(new BasicNameValuePair("Name4", "Value 4!"));
+        assertEquals("Name4=Value+4%21", URLEncodedUtils.format(params, null));
+
+        params.clear();
+        params.add(new BasicNameValuePair("Name4", "Value+4!"));
+        assertEquals("Name4=Value%2B4%21", URLEncodedUtils.format(params, null));
+
+        params.clear();
+        params.add(new BasicNameValuePair("Name4", "Value 4! !4"));
+        assertEquals("Name4=Value+4%21+%214", URLEncodedUtils.format(params, null));
+
+        params.clear();
+        params.add(new BasicNameValuePair("Name5", "aaa"));
+        params.add(new BasicNameValuePair("Name6", "bbb"));
+        assertEquals("Name5=aaa&Name6=bbb", URLEncodedUtils.format(params, null));
+
+        params.clear();
+        params.add(new BasicNameValuePair("Name7", "aaa"));
+        params.add(new BasicNameValuePair("Name7", "b,b"));
+        params.add(new BasicNameValuePair("Name7", "ccc"));
+        assertEquals("Name7=aaa&Name7=b%2Cb&Name7=ccc", URLEncodedUtils.format(params,
null));
+
+        params.clear();
+        params.add(new BasicNameValuePair("Name8", "xx,  yy  ,zz"));
+        assertEquals("Name8=xx%2C++yy++%2Czz", URLEncodedUtils.format(params, null));
+    }
+
+    private List <NameValuePair> parse (final String params, final String encoding)
{
+        return URLEncodedUtils.parse(URI.create("http://hc.apache.org/params?" + params),
encoding);
+    }
+
+    private static void assertNameValuePair (
+            final NameValuePair parameter, 
+            final String expectedName, 
+            final String expectedValue) {
+        assertEquals(parameter.getName(), expectedName);
+        assertEquals(parameter.getValue(), expectedValue);
+    }
+}
\ No newline at end of file

Propchange: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain



Mime
View raw message