deweese 01/09/26 07:49:58 Modified: sources/org/apache/batik/util ParsedURLDefaultProtocolHandler.java test-resources/org/apache/batik/util regParsedURL.xml Log: 1) Cleaned up last remaining corner cases in relative URL parsing. 2) Added tests for remaining corner cases 3) Added some documentation on what the tests are testing. Revision Changes Path 1.3 +14 -3 xml-batik/sources/org/apache/batik/util/ParsedURLDefaultProtocolHandler.java Index: ParsedURLDefaultProtocolHandler.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/util/ParsedURLDefaultProtocolHandler.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ParsedURLDefaultProtocolHandler.java 2001/09/26 12:40:51 1.2 +++ ParsedURLDefaultProtocolHandler.java 2001/09/26 14:49:58 1.3 @@ -162,6 +162,10 @@ * @param urlStr the string to parse as a URL. */ public ParsedURLData parseURL(ParsedURL baseURL, String urlStr) { + // Reference to same document (including fragment, and query). + if (urlStr.length() == 0) + return baseURL.data; + int idx = urlStr.indexOf(':'); if (idx != -1) { String protocol = urlStr.substring(0,idx).toLowerCase(); @@ -177,7 +181,7 @@ // Just a Protocol??? return parseURL(urlStr); - if (urlStr.charAt(idx) == '/') + if (urlStr.charAt(idx) == '/') // Absolute URL... return parseURL(urlStr); @@ -186,9 +190,16 @@ urlStr = urlStr.substring(idx); } - if (urlStr.startsWith("/")) - // Absolute path. + if (urlStr.startsWith("/")) { + if ((urlStr.length() > 1) && + (urlStr.charAt(1) == '/')) { + // Relative but only uses protocol from base + return parseURL(baseURL.getProtocol() + ":" + urlStr); + } + // Relative 'absolute' path, uses protocol and authority + // (host) from base return parseURL(baseURL.getPortStr() + urlStr); + } if (urlStr.startsWith("#")) return parseURL(baseURL.getPortStr() + 1.3 +46 -11 xml-batik/test-resources/org/apache/batik/util/regParsedURL.xml Index: regParsedURL.xml =================================================================== RCS file: /home/cvs/xml-batik/test-resources/org/apache/batik/util/regParsedURL.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- regParsedURL.xml 2001/09/26 12:40:51 1.2 +++ regParsedURL.xml 2001/09/26 14:49:58 1.3 @@ -8,39 +8,46 @@ <!-- ====================================================================== --> <!-- @author [EMAIL PROTECTED] --> -<!-- @version $Id: regParsedURL.xml,v 1.2 2001/09/26 12:40:51 deweese Exp $ --> +<!-- @version $Id: regParsedURL.xml,v 1.3 2001/09/26 14:49:58 deweese Exp $ --> <!-- ====================================================================== --> <testSuite name="Parsed URL test Suite"> <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test simple parsing --> <arg class="java.lang.String" value="xml.apache.org" /> <arg class="java.lang.String" value="//xml.apache.org" /> </test> <test class="org.apache.batik.util.ParsedURLTest"> - <arg class="java.lang.String" value="http://xml.apache.org/" /> - <arg class="java.lang.String" value="~deweese" /> - <arg class="java.lang.String" value="http://xml.apache.org/~deweese" /> - </test> - <test class="org.apache.batik.util.ParsedURLTest"> - <arg class="java.lang.String" value="file:///xml.apache.org" /> - <arg class="java.lang.String" value="~deweese" /> - <arg class="java.lang.String" value="file:/~deweese" /> - </test> - <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test simple parsing --> <arg class="java.lang.String" value="fooz:/home/deweese/.cshrc" /> <arg class="java.lang.String" value="fooz:/home/deweese/.cshrc" /> </test> <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test simple parsing --> <arg class="java.lang.String" value="fazz:///home/deweese/.cshrc" /> <arg class="java.lang.String" value="fazz:/home/deweese/.cshrc" /> </test> <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test simple parsing of single URL --> <arg class="java.lang.String" value="fooz://www.com:1234/home/deweese/.cshrc#abcd" /> <arg class="java.lang.String" value="fooz://www.com:1234/home/deweese/.cshrc#abcd" /> </test> <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test relative url off root --> + <arg class="java.lang.String" value="http://xml.apache.org/" /> + <arg class="java.lang.String" value="~deweese" /> + <arg class="java.lang.String" value="http://xml.apache.org/~deweese" /> + </test> + <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test relative url off file in root dir --> + <arg class="java.lang.String" value="file:///xml.apache.org" /> + <arg class="java.lang.String" value="~deweese" /> + <arg class="java.lang.String" value="file:/~deweese" /> + </test> + <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test relative with partial path and fragement ident --> <arg class="java.lang.String" value="fooz://www.com:1234/home/deweese/.cshrc#abcd" /> <arg class="java.lang.String" @@ -49,6 +56,7 @@ value="fooz://www.com:1234/home/deweese/xyz.html#efgh" /> </test> <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test relative with absolute path and fragement ident --> <arg class="java.lang.String" value="fooz://www.com:1234/home/deweese/xyz.html#efgh" /> <arg class="java.lang.String" @@ -57,11 +65,38 @@ value="fooz://www.com:1234/xyz.svg#ijkl" /> </test> <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test relative with matching protocol --> <arg class="java.lang.String" value="file:/home/deweese/test.txt" /> <arg class="java.lang.String" value="file:junk.html" /> <arg class="java.lang.String" value="file:/home/deweese/junk.html" /> + </test> + <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test just keeping protocol --> + <arg class="java.lang.String" value="http://xml.apache.org/batik/" /> + <arg class="java.lang.String" value="//jakarta.apache.org/ant/" /> + <arg class="java.lang.String" value="http://jakarta.apache.org/ant/" /> + </test> + <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test references to same document --> + <arg class="java.lang.String" + value="http://xml.apache.org/batik/#test" /> + <arg class="java.lang.String" value="" /> + <arg class="java.lang.String" + value="http://xml.apache.org/batik/#test" /> + </test> + <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test relative with absolute path to root --> + <arg class="java.lang.String" value="http://xml.apache.org/batik/" /> + <arg class="java.lang.String" value="/" /> + <arg class="java.lang.String" value="http://xml.apache.org/" /> + </test> + <test class="org.apache.batik.util.ParsedURLTest"> + <!-- Test relative with absolute path to item --> + <arg class="java.lang.String" value="http://xml.apache.org/batik/" /> + <arg class="java.lang.String" value="/fop/" /> + <arg class="java.lang.String" value="http://xml.apache.org/fop/" /> </test> </testSuite> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]