Revision: 7283 Author: [email protected] Date: Wed Dec 9 10:56:04 2009 Log: Adds DELETE, HEAD and PUT methods to RequestBuilder.
Patch by: t.broyer Review by: jlabanca,jgw Issue: 3388 http://code.google.com/p/google-web-toolkit/source/detail?r=7283 Modified: /trunk/user/src/com/google/gwt/http/client/RequestBuilder.java /trunk/user/test/com/google/gwt/http/client/RequestBuilderTest.java /trunk/user/test/com/google/gwt/http/server/RequestBuilderTestServlet.java ======================================= --- /trunk/user/src/com/google/gwt/http/client/RequestBuilder.java Wed Feb 18 05:39:02 2009 +++ /trunk/user/src/com/google/gwt/http/client/RequestBuilder.java Wed Dec 9 10:56:04 2009 @@ -25,17 +25,6 @@ /** * Builder for constructing {...@link com.google.gwt.http.client.Request} objects. * - * <p> - * By default, this builder is restricted to building HTTP GET and POST requests - * due to a bug in Safari's implementation of the <code>XmlHttpRequest</code> - * object. - * </p> - * - * <p> - * Please see <a href="http://bugs.webkit.org/show_bug.cgi?id=3812"> - * http://bugs.webkit.org/show_bug.cgi?id=3812</a> for more details. - * </p> - * * <h3>Required Module</h3> Modules that use this class should inherit * <code>com.google.gwt.http.HTTP</code>. * @@ -59,17 +48,32 @@ return name; } } + + /** + * Specifies that the HTTP DELETE method should be used. + */ + public static final Method DELETE = new Method("DELETE"); /** * Specifies that the HTTP GET method should be used. */ public static final Method GET = new Method("GET"); + /** + * Specifies that the HTTP HEAD method should be used. + */ + public static final Method HEAD = new Method("HEAD"); + /** * Specifies that the HTTP POST method should be used. */ public static final Method POST = new Method("POST"); + /** + * Specifies that the HTTP PUT method should be used. + */ + public static final Method PUT = new Method("PUT"); + /** * The callback to call when the request completes. */ @@ -136,13 +140,6 @@ * how to do this. * @throws IllegalArgumentException if the httpMethod or URL are empty * @throws NullPointerException if the httpMethod or the URL are null - * - * <p> - * <b>WARNING:</b>This method is provided in order to allow the - * creation of HTTP request other than GET and POST to be made. If - * this is done, the developer must accept that the behavior on - * Safari is undefined. - * </p> */ protected RequestBuilder(String httpMethod, String url) { ======================================= --- /trunk/user/test/com/google/gwt/http/client/RequestBuilderTest.java Tue Nov 10 10:55:44 2009 +++ /trunk/user/test/com/google/gwt/http/client/RequestBuilderTest.java Wed Dec 9 10:56:04 2009 @@ -24,9 +24,11 @@ */ public class RequestBuilderTest extends RequestTestBase { + public static final String SERVLET_DELETE_RESPONSE = "delete"; public static final String SERVLET_GET_RESPONSE = "get"; public static final String SERVLET_POST_RESPONSE = "post"; - public static final String SERVLET_HEAD_RESPONSE = "head"; + // W3C's XMLHttpRequest requires it be the empty string + public static final String SERVLET_HEAD_RESPONSE = ""; public static final String SERVLET_PUT_RESPONSE = "put"; private static String getTestBaseURL() { @@ -154,7 +156,7 @@ /** * Test method for - * {...@link com.google.gwt.http.client.RequestBuilder#RequestBuilder(java.lang.String, java.lang.String)}. * + * {...@link com.google.gwt.http.client.RequestBuilder#RequestBuilder(java.lang.String, java.lang.String)}. */ public void testRequestBuilderStringString_HTTPMethodRestrictionOverride() { new RequestBuilder(RequestBuilder.GET, "FOO"); @@ -169,96 +171,71 @@ // should reach here without any exceptions being thrown } - /** - * Test method for - * {...@link com.google.gwt.http.client.RequestBuilder#sendRequest(java.lang.String, com.google.gwt.http.client.RequestCallback)}. - */ - public void testSend_GET() throws RequestException { - delayTestFinishForRequest(); - + public void testSend_DELETE() throws RequestException { + RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, + getTestBaseURL()); + testSend(builder, SERVLET_DELETE_RESPONSE); + } + + public void testSend_GET() throws RequestException { RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, getTestBaseURL() + "send_GET"); - builder.setCallback(new RequestCallback() { - public void onError(Request request, Throwable exception) { - fail(exception.getMessage()); - } - - public void onResponseReceived(Request request, Response response) { - assertEquals(SERVLET_GET_RESPONSE, response.getText()); - assertEquals(200, response.getStatusCode()); - finishTest(); - } - }); - builder.send(); + testSend(builder, SERVLET_GET_RESPONSE); + } + + public void testSend_HEAD() throws RequestException { + RequestBuilder builder = new RequestBuilder(RequestBuilder.HEAD, + getTestBaseURL()); + testSend(builder, SERVLET_HEAD_RESPONSE); } - /** - * Test method for {...@link com.google.gwt.http.client.RequestBuilder#send()}. - */ public void testSend_POST() throws RequestException { - delayTestFinishForRequest(); - RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, getTestBaseURL() + "sendRequest_POST"); builder.setHeader("Content-Type", "application/x-www-form-urlencoded"); - builder.setCallback(new RequestCallback() { - public void onError(Request request, Throwable exception) { - fail(exception.getMessage()); - } - - public void onResponseReceived(Request request, Response response) { - assertEquals(SERVLET_POST_RESPONSE, response.getText()); - assertEquals(200, response.getStatusCode()); - finishTest(); - } - }); builder.setRequestData("method=test+request"); - builder.send(); + testSend(builder, SERVLET_POST_RESPONSE); } - /** - * Test method for - * {...@link com.google.gwt.http.client.RequestBuilder#sendRequest(java.lang.String, com.google.gwt.http.client.RequestCallback)}. - */ - public void testSendRequest_GET() throws RequestException { - delayTestFinishForRequest(); - + public void testSend_PUT() throws RequestException { + RequestBuilder builder = new RequestBuilder(RequestBuilder.PUT, + getTestBaseURL()); + builder.setHeader("Content-Type", "text/html"); + builder.setRequestData("<html><body>Put Me</body></html>"); + testSend(builder, SERVLET_PUT_RESPONSE); + } + + public void testSendRequest_DELETE() throws RequestException { + RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, + getTestBaseURL()); + testSendRequest(builder, null, SERVLET_DELETE_RESPONSE); + } + + public void testSendRequest_GET() throws RequestException { RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, getTestBaseURL() + "sendRequest_GET"); - builder.sendRequest(null, new RequestCallback() { - public void onError(Request request, Throwable exception) { - fail(exception.getMessage()); - } - - public void onResponseReceived(Request request, Response response) { - assertEquals(SERVLET_GET_RESPONSE, response.getText()); - assertEquals(200, response.getStatusCode()); - finishTest(); - } - }); + testSendRequest(builder, null, SERVLET_GET_RESPONSE); + } + + public void testSendRequest_HEAD() throws RequestException { + RequestBuilder builder = new RequestBuilder(RequestBuilder.HEAD, + getTestBaseURL()); + testSendRequest(builder, null, SERVLET_HEAD_RESPONSE); } - /** - * Test method for - * {...@link com.google.gwt.http.client.RequestBuilder#sendRequest(java.lang.String, com.google.gwt.http.client.RequestCallback)}. - */ public void testSendRequest_POST() throws RequestException { - delayTestFinishForRequest(); - RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, getTestBaseURL() + "sendRequest_POST"); builder.setHeader("Content-Type", "application/x-www-form-urlencoded"); - builder.sendRequest("method=test+request", new RequestCallback() { - public void onError(Request request, Throwable exception) { - fail(exception.getMessage()); - } - - public void onResponseReceived(Request request, Response response) { - assertEquals(SERVLET_POST_RESPONSE, response.getText()); - assertEquals(200, response.getStatusCode()); - finishTest(); - } - }); + testSendRequest(builder, "method=test+request", SERVLET_POST_RESPONSE); + } + + public void testSendRequest_PUT() throws RequestException { + RequestBuilder builder = new RequestBuilder(RequestBuilder.PUT, + getTestBaseURL()); + builder.setHeader("Content-Type", "application/x-www-form-urlencoded"); + testSendRequest(builder, "<html><body>Put Me</body></html>", + SERVLET_PUT_RESPONSE); } public void testSetCallback() { @@ -431,4 +408,51 @@ } catch (IllegalArgumentException expected) { } } -} + + /** + * Helper method to test {...@link RequestBuilder#send()}. + * + * @param builder the {...@link RequestBuilder} + * @param expectedResponse the expected response + */ + private void testSend(RequestBuilder builder, final String expectedResponse) + throws RequestException { + delayTestFinishForRequest(); + builder.setCallback(new RequestCallback() { + public void onError(Request request, Throwable exception) { + fail(exception.getMessage()); + } + + public void onResponseReceived(Request request, Response response) { + assertEquals(expectedResponse, response.getText()); + assertEquals(200, response.getStatusCode()); + finishTest(); + } + }); + builder.send(); + } + + /** + * Helper method to test + * {...@link RequestBuilder#sendRequest(String, RequestCallback)}. + * + * @param builder the {...@link RequestBuilder} + * @param requestData the data to request + * @param expectedResponse the expected response + */ + private void testSendRequest(RequestBuilder builder, String requestData, + final String expectedResponse) throws RequestException { + delayTestFinishForRequest(); + builder.sendRequest(requestData, new RequestCallback() { + public void onError(Request request, Throwable exception) { + fail(exception.getMessage()); + } + + public void onResponseReceived(Request request, Response response) { + assertEquals(expectedResponse, response.getText()); + assertEquals(200, response.getStatusCode()); + finishTest(); + } + }); + } +} ======================================= --- /trunk/user/test/com/google/gwt/http/server/RequestBuilderTestServlet.java Mon May 18 11:47:32 2009 +++ /trunk/user/test/com/google/gwt/http/server/RequestBuilderTestServlet.java Wed Dec 9 10:56:04 2009 @@ -37,7 +37,12 @@ @Override protected void doDelete(HttpServletRequest request, HttpServletResponse response) { - response.setStatus(HttpServletResponse.SC_OK); + try { + response.setStatus(HttpServletResponse.SC_OK); + response.getWriter().print(RequestBuilderTest.SERVLET_DELETE_RESPONSE); + } catch (IOException e) { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } } @Override @@ -90,12 +95,7 @@ @Override protected void doHead(HttpServletRequest request, HttpServletResponse response) { - try { - response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().print(RequestBuilderTest.SERVLET_HEAD_RESPONSE); - } catch (IOException e) { - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - } + response.setStatus(HttpServletResponse.SC_OK); } @Override -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
