Author: jvanzyl Date: Mon May 28 14:57:05 2007 New Revision: 542333 URL: http://svn.apache.org/viewvc?view=rev&rev=542333 Log: o missing bits of commits for previous patches
Added: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptor.java (with props) maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathUtils.java (with props) maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/Doxia91Test.java (with props) maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptorTest.java (with props) Added: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptor.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptor.java?view=auto&rev=542333 ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptor.java (added) +++ maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptor.java Mon May 28 14:57:05 2007 @@ -0,0 +1,194 @@ +package org.apache.maven.doxia.site.decoration.inheritance; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; + +import org.codehaus.plexus.util.StringUtils; + +/* + * Copyright 2004-2006 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. + * + */ + +/** + * This class holds an instance of a maven path. This consists of a relative path (e.g. images/maven-logo.png) and a + * base reference which can also be a relative path (e.g. '.' or '../doxia') or an URL that is used for an absolute + * anchor. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Henning P. Schmiedehausen</a> + * @version $Id$ + */ + +public class PathDescriptor +{ + private final URL baseUrl; + + private final URL pathUrl; + + private final String relativePath; + + public PathDescriptor( final String path ) throws MalformedURLException + { + this( (URL) null, path ); + } + + public PathDescriptor( final String base, final String path ) throws MalformedURLException + { + this( PathDescriptor.buildBaseUrl( base ), path ); + } + + public PathDescriptor( final URL baseUrl, final String path ) throws MalformedURLException + { + this.baseUrl = baseUrl; + + URL pathUrl = null; + String relativePath = null; + try + { + pathUrl = new URL( path ); + } + catch ( MalformedURLException e ) + { + try + { + pathUrl = buildUrl( baseUrl, path ); + } + catch ( MalformedURLException e2 ) + { + // If we got an absolute path passed in and end here, then the path + // is converted to relative because we have no reference URL anyway + // to which it has been anchored. + if ( path != null && path.startsWith( "/" ) ) + { + relativePath = path.substring( 1 ); + } + else + { + relativePath = path; + } + } + } + this.pathUrl = pathUrl; + this.relativePath = relativePath; + } + + private static final URL buildBaseUrl( final String base ) throws MalformedURLException + { + if ( base == null ) + { + return null; + } + + try + { + return new URL( base ); + } + catch ( MalformedURLException e ) + { + return new File( base ).toURL(); + } + } + + private static final URL buildUrl( final URL baseUrl, final String path ) throws MalformedURLException + { + if ( baseUrl == null ) + { + throw new MalformedURLException( "Base is null!" ); + } + + if ( path == null ) + { + return baseUrl; + } + + if ( baseUrl.getProtocol().equals( "file" ) ) + { + return new File( baseUrl.getFile(), path ).toURL(); + } + + if ( path.startsWith( "/" ) && baseUrl.getPath().endsWith( "/" ) ) + { + return new URL( baseUrl, path.substring( 1 ) ); + } + + return new URL( baseUrl, path ); + } + + public boolean isFile() + { + return isRelative() || pathUrl.getProtocol().equals( "file" ); + } + + public boolean isRelative() + { + return pathUrl == null; + } + + public URL getBaseUrl() + { + return baseUrl; + } + + public URL getPathUrl() + { + return pathUrl; + } + + public String getPath() + { + if ( getPathUrl() != null ) + { + if ( isFile() ) + { + return StringUtils.stripEnd( getPathUrl().getPath(), "/" ); + } + else + { + return getPathUrl().getPath(); + } + } + else + { + return relativePath; + } + } + + public String getLocation() + { + if ( isFile() ) + { + if ( getPathUrl() != null ) + { + return StringUtils.stripEnd( getPathUrl().getFile(), "/" ); + } + else + { + return relativePath; + } + } + else + { + return getPathUrl().toExternalForm(); + } + } + + public String toString() + { + StringBuffer res = + new StringBuffer( ( StringUtils.isNotEmpty( relativePath ) ) ? relativePath : String.valueOf( pathUrl ) ); + res.append( " (Base: " ).append( baseUrl ).append( ") Location: " ).append( getLocation() ); + return res.toString(); + } +} Propchange: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptor.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathUtils.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathUtils.java?view=auto&rev=542333 ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathUtils.java (added) +++ maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathUtils.java Mon May 28 14:57:05 2007 @@ -0,0 +1,262 @@ +package org.apache.maven.doxia.site.decoration.inheritance; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.StringTokenizer; + +/* + * Copyright 2004-2006 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. + * + */ + +/** + * Utilitites that allow conversion of old and new pathes and URLs relative to each other. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Henning P. Schmiedehausen</a> + * @version $Id$ + */ +public abstract class PathUtils +{ + private PathUtils() + { + } + + public static final PathDescriptor convertPath( final PathDescriptor oldPath, final PathDescriptor newPath ) + throws MalformedURLException + { + String relative = getRelativePath( oldPath, newPath ); + + if ( relative == null ) + { + return oldPath; + } + + return new PathDescriptor( relative ); + } + + public static final String getRelativePath( final PathDescriptor oldPathDescriptor, + final PathDescriptor newPathDescriptor ) throws MalformedURLException + { + // Cannot convert from URL to file. + if ( oldPathDescriptor.isFile() ) + { + if ( !newPathDescriptor.isFile() ) + { + // We want to convert from a file to an URL. This is normally not possible... + if ( oldPathDescriptor.isRelative() ) + { + // unless the old path is a relative path. Then we might convert an existing + // site into a new URL using resolvePaths()... + return oldPathDescriptor.getPath(); + } + else + { + // The old path is not relative. Bail out. + return null; + } + } + } + + // Don't optimize to else. This might also be old.isFile && new.isFile ... + if ( !oldPathDescriptor.isFile() ) + { + // URLs, determine if they share protocol and domain info + URL oldUrl = oldPathDescriptor.getPathUrl(); + URL newUrl = newPathDescriptor.getPathUrl(); + + if ( ( newUrl.getProtocol().equalsIgnoreCase( oldUrl.getProtocol() ) ) + && ( newUrl.getHost().equalsIgnoreCase( oldUrl.getHost() ) ) + && ( newUrl.getPort() == oldUrl.getPort() ) ) + { + // Both pathes point to the same site. So we can use relative pathes. + + String oldPath = oldPathDescriptor.getPath(); + String newPath = newPathDescriptor.getPath(); + + return getRelativeWebPath( newPath, oldPath ); + } + else + { + // Different sites. No relative Path possible. + return null; + } + } + else + { + // Both Descriptors point to a path. We can build a relative path. + String oldPath = oldPathDescriptor.getPath(); + String newPath = newPathDescriptor.getPath(); + + if ( oldPath == null || newPath == null ) + { + // One of the sites has a strange URL. no relative path possible, bail out. + return null; + } + + return getRelativeFilePath( oldPath, newPath ); + } + } + + /** + * This method can calculate the relative path between two pathes on a web site. + */ + public static final String getRelativeWebPath( final String oldPath, final String newPath ) + { + String resultPath = buildRelativePath( newPath, oldPath, '/' ); + + if ( newPath.endsWith( "/" ) && !resultPath.endsWith( "/" ) ) + { + return resultPath + "/"; + } + else + { + return resultPath; + } + } + + /** + * This method can calculate the relative path between two pathes on a file system. + */ + public static final String getRelativeFilePath( final String oldPath, final String newPath ) + { + // normalise the path delimiters + String fromPath = new File( oldPath ).getPath(); + String toPath = new File( newPath ).getPath(); + + // strip any leading slashes if its a windows path + if ( toPath.matches( "^\\[a-zA-Z]:" ) ) + { + toPath = toPath.substring( 1 ); + } + if ( fromPath.matches( "^\\[a-zA-Z]:" ) ) + { + fromPath = fromPath.substring( 1 ); + } + + // lowercase windows drive letters. + if ( fromPath.startsWith( ":", 1 ) ) + { + fromPath = fromPath.substring( 0, 1 ).toLowerCase() + fromPath.substring( 1 ); + } + if ( toPath.startsWith( ":", 1 ) ) + { + toPath = toPath.substring( 0, 1 ).toLowerCase() + toPath.substring( 1 ); + } + + // check for the presence of windows drives. No relative way of + // traversing from one to the other. + if ( ( toPath.startsWith( ":", 1 ) && fromPath.startsWith( ":", 1 ) ) + && ( !toPath.substring( 0, 1 ).equals( fromPath.substring( 0, 1 ) ) ) ) + { + // they both have drive path element but they dont match, no + // relative path + return null; + } + + if ( ( toPath.startsWith( ":", 1 ) && !fromPath.startsWith( ":", 1 ) ) + || ( !toPath.startsWith( ":", 1 ) && fromPath.startsWith( ":", 1 ) ) ) + { + // one has a drive path element and the other doesnt, no relative + // path. + return null; + } + + String resultPath = buildRelativePath( toPath, fromPath, File.separatorChar ); + + if ( newPath.endsWith( File.separator ) && !resultPath.endsWith( File.separator ) ) + { + return resultPath + File.separator; + } + else + { + return resultPath; + } + } + + private static final String buildRelativePath( final String toPath, final String fromPath, final char separatorChar ) + { + // use tokeniser to traverse paths and for lazy checking + StringTokenizer toTokeniser = new StringTokenizer( toPath, String.valueOf( separatorChar ) ); + StringTokenizer fromTokeniser = new StringTokenizer( fromPath, String.valueOf( separatorChar ) ); + + int count = 0; + + // walk along the to path looking for divergence from the from path + while ( toTokeniser.hasMoreTokens() && fromTokeniser.hasMoreTokens() ) + { + if ( separatorChar == '\\' ) + { + if ( !fromTokeniser.nextToken().equalsIgnoreCase( toTokeniser.nextToken() ) ) + { + break; + } + } + else + { + if ( !fromTokeniser.nextToken().equals( toTokeniser.nextToken() ) ) + { + break; + } + } + + count++; + } + + // reinitialise the tokenisers to count positions to retrieve the + // gobbled token + + toTokeniser = new StringTokenizer( toPath, String.valueOf( separatorChar ) ); + fromTokeniser = new StringTokenizer( fromPath, String.valueOf( separatorChar ) ); + + while ( count-- > 0 ) + { + fromTokeniser.nextToken(); + toTokeniser.nextToken(); + } + + String relativePath = ""; + + // add back refs for the rest of from location. + while ( fromTokeniser.hasMoreTokens() ) + { + fromTokeniser.nextToken(); + + relativePath += ".."; + + if ( fromTokeniser.hasMoreTokens() ) + { + relativePath += separatorChar; + } + } + + if ( relativePath.length() != 0 && toTokeniser.hasMoreTokens() ) + { + relativePath += separatorChar; + } + + // add fwd fills for whatevers left of newPath. + while ( toTokeniser.hasMoreTokens() ) + { + relativePath += toTokeniser.nextToken(); + + if ( toTokeniser.hasMoreTokens() ) + { + relativePath += separatorChar; + } + } + return relativePath; + } +} Propchange: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathUtils.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/PathUtils.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/Doxia91Test.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/Doxia91Test.java?view=auto&rev=542333 ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/Doxia91Test.java (added) +++ maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/Doxia91Test.java Mon May 28 14:57:05 2007 @@ -0,0 +1,63 @@ +package org.apache.maven.doxia.site.decoration.inheritance; + +import junit.framework.TestCase; + +/* + * 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. + */ + +/** + * Testcase for DOXIA-91 problems. All tests make sure that a passed in null will not generate any path conversion but + * just returns the old path. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Henning P. Schmiedehausen</a> + */ + +public class Doxia91Test extends TestCase +{ + + public void testOldPathNull() throws Exception + { + PathDescriptor oldPath = new PathDescriptor( null ); + PathDescriptor newPath = new PathDescriptor( "http://www.apache.org/" ); + + PathDescriptor diff = PathUtils.convertPath( oldPath, newPath ); + + assertEquals( diff, oldPath ); + } + + public void testNewPathNull() throws Exception + { + PathDescriptor oldPath = new PathDescriptor( "http://www.apache.org/", "file:///home/henning/foo" ); + PathDescriptor newPath = new PathDescriptor( null ); + + PathDescriptor diff = PathUtils.convertPath( oldPath, newPath ); + + assertEquals( diff, oldPath ); + } + + public void testBothPathNull() throws Exception + { + PathDescriptor oldPath = new PathDescriptor( null ); + PathDescriptor newPath = new PathDescriptor( null ); + + PathDescriptor diff = PathUtils.convertPath( oldPath, newPath ); + + assertEquals( diff, oldPath ); + } +} Propchange: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/Doxia91Test.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/Doxia91Test.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptorTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptorTest.java?view=auto&rev=542333 ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptorTest.java (added) +++ maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptorTest.java Mon May 28 14:57:05 2007 @@ -0,0 +1,452 @@ +package org.apache.maven.doxia.site.decoration.inheritance; + +/* + * 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. + */ + +import junit.framework.TestCase; + +/** + * Test the PathDescriptor creation under various circumstances. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Henning P. Schmiedehausen</a> + */ + +public class PathDescriptorTest extends TestCase +{ + + public void testAbsPath() throws Exception + { + String path = "absolutePath"; + + PathDescriptor desc = new PathDescriptor( "/" + path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testRelPath() throws Exception + { + String path = "relativePath"; + + PathDescriptor desc = new PathDescriptor( path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testEmptyAbsPath() throws Exception + { + String path = ""; + + PathDescriptor desc = new PathDescriptor( "/" + path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testEmptyRelPath() throws Exception + { + String path = ""; + + PathDescriptor desc = new PathDescriptor( path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testNullPath() throws Exception + { + String path = null; + + PathDescriptor desc = new PathDescriptor( path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNull( desc.getPath() ); + assertNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testNullBaseAbsPath() throws Exception + { + String base = null; + String path = "absolutePath"; + + PathDescriptor desc = new PathDescriptor( base, "/" + path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testNullBaseRelPath() throws Exception + { + String base = null; + String path = "relativePath"; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testNullBaseEmptyAbsPath() throws Exception + { + String base = null; + String path = ""; + + PathDescriptor desc = new PathDescriptor( base, "/" + path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testNullBaseEmptyRelPath() throws Exception + { + String base = null; + String path = ""; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testNullBaseNullPath() throws Exception + { + String base = null; + String path = null; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertTrue( desc.isFile() ); + assertTrue( desc.isRelative() ); + assertNull( desc.getBaseUrl() ); + assertNull( desc.getPathUrl() ); + assertNull( desc.getPath() ); + assertNull( desc.getLocation() ); + assertEquals( "wrong path", path, desc.getPath() ); + assertEquals( "wrong location", path, desc.getLocation() ); + } + + public void testUrlBaseAbsPath() throws Exception + { + String base = "http://maven.apache.org/"; + String path = "absolutePath"; + + PathDescriptor desc = new PathDescriptor( base, "/" + path ); + + assertFalse( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", "/" + path, desc.getPath() ); + assertEquals( "wrong location", base + path, desc.getLocation() ); + } + + public void testUrlBaseRelPath() throws Exception + { + String base = "http://maven.apache.org/"; + String path = "relativePath"; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertFalse( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", "/" + path, desc.getPath() ); + assertEquals( "wrong location", base + path, desc.getLocation() ); + } + + public void testUrlBaseEmptyAbsPath() throws Exception + { + String base = "http://maven.apache.org/"; + String path = ""; + + PathDescriptor desc = new PathDescriptor( base, "/" + path ); + + assertFalse( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", "/" + path, desc.getPath() ); + assertEquals( "wrong location", base + path, desc.getLocation() ); + } + + public void testUrlBaseEmptyRelPath() throws Exception + { + String base = "http://maven.apache.org/"; + String path = ""; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertFalse( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", "/" + path, desc.getPath() ); + assertEquals( "wrong location", base + path, desc.getLocation() ); + } + + public void testUrlBaseNullPath() throws Exception + { + String base = "http://maven.apache.org/"; + String path = null; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertFalse( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", "/", desc.getPath() ); + assertEquals( "wrong location", base, desc.getLocation() ); + } + + public void testFileBaseAbsPath() throws Exception + { + String base = "/tmp/foo"; + String path = "absolutePath"; + + PathDescriptor desc = new PathDescriptor( "file://" + base, "/" + path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base + "/" + path, desc.getPath() ); + assertEquals( "wrong location", base + "/" + path, desc.getLocation() ); + } + + public void testFileBaseRelPath() throws Exception + { + String base = "/tmp/foo"; + String path = "relativePath"; + + PathDescriptor desc = new PathDescriptor( "file://" + base, path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base + "/" + path, desc.getPath() ); + assertEquals( "wrong location", base + "/" + path, desc.getLocation() ); + } + + public void testFileBaseEmptyAbsPath() throws Exception + { + String base = "/tmp/foo"; + String path = ""; + + PathDescriptor desc = new PathDescriptor( "file://" + base, "/" + path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base, desc.getPath() ); + assertEquals( "wrong location", base, desc.getLocation() ); + } + + public void testFileBaseEmptyRelPath() throws Exception + { + String base = "/tmp/foo"; + String path = ""; + + PathDescriptor desc = new PathDescriptor( "file://" + base, path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base, desc.getPath() ); + assertEquals( "wrong location", base, desc.getLocation() ); + } + + public void testFileBaseNullPath() throws Exception + { + String base = "/tmp/foo"; + String path = null; + + PathDescriptor desc = new PathDescriptor( "file://" + base, path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base, desc.getPath() ); + assertEquals( "wrong location", base, desc.getLocation() ); + } + + public void testPathBaseAbsPath() throws Exception + { + String base = "/tmp/foo"; + String path = "absolutePath"; + + PathDescriptor desc = new PathDescriptor( base, "/" + path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base + "/" + path, desc.getPath() ); + assertEquals( "wrong location", base + "/" + path, desc.getLocation() ); + } + + public void testPathBaseRelPath() throws Exception + { + String base = "/tmp/foo"; + String path = "relativePath"; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base + "/" + path, desc.getPath() ); + assertEquals( "wrong location", base + "/" + path, desc.getLocation() ); + } + + public void testPathBaseEmptyAbsPath() throws Exception + { + String base = "/tmp/foo"; + String path = ""; + + PathDescriptor desc = new PathDescriptor( base, "/" + path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base, desc.getPath() ); + assertEquals( "wrong location", base, desc.getLocation() ); + } + + public void testPathBaseEmptyRelPath() throws Exception + { + String base = "/tmp/foo"; + String path = ""; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base, desc.getPath() ); + assertEquals( "wrong location", base, desc.getLocation() ); + } + + public void testPathBaseNullPath() throws Exception + { + String base = "/tmp/foo"; + String path = null; + + PathDescriptor desc = new PathDescriptor( base, path ); + + assertTrue( desc.isFile() ); + assertFalse( desc.isRelative() ); + assertNotNull( desc.getBaseUrl() ); + assertNotNull( desc.getPathUrl() ); + assertNotNull( desc.getPath() ); + assertNotNull( desc.getLocation() ); + assertEquals( "wrong path", base, desc.getPath() ); + assertEquals( "wrong location", base, desc.getLocation() ); + } +} Propchange: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/PathDescriptorTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision"