/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed 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. */ package test.httpunit; import junit.framework.TestCase; import com.meterware.httpunit.*; import java.io.*; import java.net.MalformedURLException; import org.xml.sax.SAXException; /** * class to make it that much easier to validate httpunit requests */ public class HttpUnitTestBase extends TestCase { /** * our url * */ protected String url; public HttpUnitTestBase(String s) { super(s); } private static String URL_PROPERTY="test.functional.webapp.url"; /** * The JUnit setup method * */ public void setUp() throws Exception { url=System.getProperty(URL_PROPERTY); assertNotNull(URL_PROPERTY+" not set",url); HttpUnitOptions.setExceptionsThrownOnErrorStatus(true); HttpUnitOptions.setMatchesIgnoreCase(true); HttpUnitOptions.setParserWarningsEnabled(true); } /** * assert that the response contains a string * @param response * @param searchfor * @param url * @throws IOException */ public void assertStringInBody(WebResponse response,String searchfor, String url) throws IOException { String body=response.getText(); boolean found=body.indexOf(searchfor)>=0; if(!found) { String message; message="failed to find ["+searchfor+"] at "+url; fail(message); } } /** * assert that a named string is in the request body of the * response to a request * @param request what we ask * @param searchfor string to look for * @throws IOException when the fetch fails * @throws org.xml.sax.SAXException */ protected void assertStringInBody( WebRequest request, String searchfor ) throws IOException, org.xml.sax.SAXException { WebResponse response = makeRequest(request); assertStringInBody(response,searchfor,request.getURL().toString()); } /** * make a request in a new session * @param request request to make * @return the response * @throws IOException * @throws SAXException */ protected WebResponse makeRequest(WebRequest request) throws IOException, SAXException { WebConversation session = new WebConversation(); WebResponse response=session.getResponse(request); return response; } /** * assert that a string is not in a response * @param response * @param searchfor * @param url * @throws IOException */ protected void assertStringNotInBody(WebResponse response, String searchfor, String url) throws IOException { String body=response.getText(); boolean found=body.indexOf(searchfor)>=0; if(found) { String message; message="unexpectedly found "+searchfor+" at "+url; fail(message); } } /** * assert that a string is not in the response to a request * @param request * @param searchfor * @throws IOException * @throws org.xml.sax.SAXException */ protected void assertStringNotInBody( WebRequest request, String searchfor) throws IOException, org.xml.sax.SAXException { WebConversation session = new WebConversation(); WebResponse response=session.getResponse(request); assertStringNotInBody(response,searchfor, request.getURL().toString()); } /** * here we expect an errorCode other than 200, and look for it * checking for text is omitted as it doesnt work. It would never work on * java1.3, but one may have expected java1.4+ to have access to the * error stream in responses. clearly not * @param request * @param errorCode * @param errorText optional text string to search for * @throws MalformedURLException * @throws IOException * @throws SAXException */ protected void expectErrorCode(WebRequest request, int errorCode, String errorText) throws MalformedURLException, IOException, SAXException { WebConversation session = new WebConversation(); String failureText="Expected error "+errorCode+" from "+request.getURL(); try { session.getResponse(request); fail(errorText+" -got success instead"); } catch (HttpException e) { assertEquals(failureText,errorCode,e.getResponseCode()); /* checking for text omitted as it doesnt work. if(errorText!=null) { assertTrue( "Failed to find "+errorText+" in "+ e.getResponseMessage(), e.getMessage().indexOf(errorText)>=0); } */ } } }