| /* |
| * The Apache Software License, Version 1.1 |
| * |
| * Copyright (c) 1999 The Apache Software Foundation. All rights |
| * reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * |
| * 3. The end-user documentation included with the redistribution, |
| * if any, must include the following acknowledgment: |
| * "This product includes software developed by the |
| * Apache Software Foundation (http://www.apache.org/)." |
| * Alternately, this acknowledgment may appear in the software itself, |
| * if and wherever such third-party acknowledgments normally appear. |
| * |
| * 4. The names "Xerces" and "Apache Software Foundation" must |
| * not be used to endorse or promote products derived from this |
| * software without prior written permission. For written |
| * permission, please contact apache\@apache.org. |
| * |
| * 5. Products derived from this software may not be called "Apache", |
| * nor may "Apache" appear in their name, without prior written |
| * permission of the Apache Software Foundation. |
| * |
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR |
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| * SUCH DAMAGE. |
| * ==================================================================== |
| * |
| * This software consists of voluntary contributions made by many |
| * individuals on behalf of the Apache Software Foundation, and was |
| * originally based on software copyright (c) 1999, International |
| * Business Machines, Inc., http://www.ibm.com . For more information |
| * on the Apache Software Foundation, please see |
| * <http://www.apache.org/>. |
| */ |
| |
| /** |
| * $Log$ |
| * Revision 1.2 1999/12/07 23:11:01 roddey |
| * Add in some new tests for transcoders and update the URL tests |
| * a bit. |
| * |
| * Revision 1.1.1.1 1999/11/09 01:02:05 twl |
| * Initial checkin |
| * |
| * Revision 1.2 1999/11/08 20:42:28 rahul |
| * Swat for adding in Product name and CVS comment log variable. |
| * |
| */ |
| |
| // --------------------------------------------------------------------------- |
| // XML4C2 includes |
| // --------------------------------------------------------------------------- |
| #include <util/RuntimeException.hpp> |
| #include <util/URL.hpp> |
| #include "CoreTests.hpp" |
| |
| |
| // --------------------------------------------------------------------------- |
| // Local test methods |
| // --------------------------------------------------------------------------- |
| static bool parseTests() |
| { |
| URL testURL; |
| |
| // |
| // First lets set some invalid URL's and make sure that we get the |
| // expected malformed URL exceptions. Use an outer generic catch to |
| // handle anything unexpected and report it. |
| // |
| try |
| { |
| static const char* badURLS[] = |
| { |
| "myfile.txt" |
| , "bubba:///myfile.txt" |
| , "file://myfile.txt" |
| , 0 |
| }; |
| unsigned int index = 0; |
| |
| while (badURLS[index]) |
| { |
| bool gotIt = false; |
| try |
| { |
| testURL.setURL(badURLS[index]); |
| } |
| |
| catch(const MalformedURLException&) |
| { |
| gotIt = true; |
| } |
| |
| if (!gotIt) |
| { |
| outStrm << "Failed to get bad URL exception for: " |
| << badURLS[index] << EndLn; |
| return false; |
| } |
| index++; |
| } |
| } |
| |
| catch(const XMLException& toCatch) |
| { |
| outStrm << "Got an unexpected exception.\n Type:" |
| << toCatch.getType() << ", Message:" << toCatch.getMessage() |
| << EndLn; |
| return false; |
| } |
| |
| catch(...) |
| { |
| outStrm << "Got an unexpected system exception." << EndLn; |
| return false; |
| } |
| |
| |
| // |
| // Next lets test that we get runtime exceptions for unsupported |
| // protocols. |
| // |
| try |
| { |
| static const char* unsupportedURLS[] = |
| { |
| "http:///xyz" |
| , "gopher:///myfile.txt" |
| , "wais:///myfile.txt" |
| , "ftp://host/filename.txt" |
| , "mailto://goober.74/snobby" |
| , 0 |
| }; |
| |
| unsigned int index = 0; |
| while (unsupportedURLS[index]) |
| { |
| bool gotIt = false; |
| try |
| { |
| testURL.setURL(unsupportedURLS[index]); |
| } |
| |
| catch(const MalformedURLException&) |
| { |
| gotIt = true; |
| } |
| |
| if (!gotIt) |
| { |
| outStrm << "Failed to get runtime exception for: " |
| << unsupportedURLS[index] << EndLn; |
| return false; |
| } |
| index++; |
| } |
| } |
| |
| catch(const XMLException& toCatch) |
| { |
| outStrm << "Got an unexpected exception.\n Type:" |
| << toCatch.getType() << ", Message:" << toCatch.getMessage() |
| << EndLn; |
| return false; |
| } |
| |
| catch(...) |
| { |
| outStrm << "Got an unexpected system exception." << EndLn; |
| return false; |
| } |
| |
| return true; |
| } |
| |
| |
| static bool basicTests() |
| { |
| // |
| // Set up a list of URLs and what we expect to get out of them for |
| // the various components. |
| // |
| struct TestInfo |
| { |
| const char* urlText; |
| const char* hostComp; |
| const char* pathComp; |
| const char* protocol; |
| }; |
| |
| static const TestInfo testList[] = |
| { |
| { "file:///A:\\abc.txt" , "" , "A:\\abc.txt" , "file://" } |
| , { "file://localhost/A:\\abc.txt", "localhost" , "A:\\abc.txt" , "file://" } |
| , { "file:///abc.txt" , "" , "/abc.txt" , "file://" } |
| , { "file:///A:\\a%20c.txt" , "" , "A:\\a c.txt" , "file://" } |
| , { 0, 0, 0, 0 } |
| }; |
| |
| bool result = true; |
| unsigned int index = 0; |
| while (true) |
| { |
| // Break out at the end |
| if (!testList[index].urlText) |
| break; |
| |
| // Parse the next URL in the list |
| URL testURL; |
| testURL.setURL(testList[index].urlText); |
| |
| // |
| // And test the various components. We have to transcode them in order |
| // to do the the comparison. |
| // |
| XMLCh* tmpStr = XMLString::transcode(testList[index].hostComp); |
| if (XMLString::compareString(testURL.getHost(), tmpStr)) |
| { |
| outStrm << "Host incorrect on URL: " << testList[index].urlText << EndLn; |
| result = false; |
| } |
| delete [] tmpStr; |
| |
| tmpStr = XMLString::transcode(testList[index].protocol); |
| if (XMLString::compareString(testURL.getProtocol(), tmpStr)) |
| { |
| outStrm << "Protocol incorrect on URL: " << testList[index].urlText << EndLn; |
| result = false; |
| } |
| delete [] tmpStr; |
| |
| tmpStr = XMLString::transcode(testList[index].pathComp); |
| if (XMLString::compareString(testURL.getPath(), tmpStr)) |
| { |
| outStrm << "Path incorrect on URL: " << testList[index].urlText << EndLn; |
| result = false; |
| } |
| delete [] tmpStr; |
| |
| // Move up to the next test |
| index++; |
| } |
| return result; |
| } |
| |
| |
| |
| // --------------------------------------------------------------------------- |
| // Test entry point |
| // --------------------------------------------------------------------------- |
| bool testURL() |
| { |
| outStrm << "----------------------------------\n" |
| << "Testing URL class \n" |
| << "----------------------------------" |
| << EndLn; |
| |
| bool retVal = true; |
| try |
| { |
| // Test the URL parsing code |
| outStrm << "Testing URL Parsing" << EndLn; |
| if (!parseTests()) |
| { |
| outStrm << "URL parsing tests failed\n"; |
| retVal = false; |
| } |
| else |
| { |
| outStrm << "URL parsing tests passed\n"; |
| } |
| outStrm << EndLn; |
| |
| // Now test basic functionality |
| outStrm << "Testing URL Basics" << EndLn; |
| if (!basicTests()) |
| { |
| outStrm << "URL basic tests failed\n"; |
| retVal = false; |
| } |
| else |
| { |
| outStrm << "URL basic tests passed\n"; |
| } |
| outStrm << EndLn; |
| } |
| |
| catch(const XMLException& toCatch) |
| { |
| outStrm << " ERROR: Unexpected exception!\n Msg: " |
| << toCatch.getMessage() << EndLn; |
| return false; |
| } |
| return retVal; |
| } |