eolivelli closed pull request #3: [MWAR-371] Overlays break first-win rule for 
web resource with target path ending with '/'
URL: https://github.com/apache/maven-war-plugin/pull/3
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/src/it/MWAR-371/custom/pom.xml b/src/it/MWAR-371/custom/pom.xml
new file mode 100644
index 0000000..b2aa197
--- /dev/null
+++ b/src/it/MWAR-371/custom/pom.xml
@@ -0,0 +1,65 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>mwar371</groupId>
+               <artifactId>mwar371</artifactId>
+               <version>1.0-SNAPSHOT</version>
+       </parent>
+       <artifactId>custom</artifactId>
+       <packaging>war</packaging>
+       <dependencies>
+               <dependency>
+                       <groupId>mwar371</groupId>
+                       <artifactId>generic</artifactId>
+                       <version>1.0-SNAPSHOT</version>
+                       <type>war</type>
+               </dependency>
+       </dependencies>
+       <build>
+
+               <plugins>
+                       <plugin>
+                               <artifactId>maven-war-plugin</artifactId>
+                               <configuration>
+                                       <webResources>
+                                               <webResource>
+                                                       
<directory>src/main/custom</directory>
+                                                       <includes>
+                                                               
<include>a1.txt</include>
+                                                       </includes>
+                                                       
<targetPath>x/</targetPath>
+                                               </webResource>
+                                               <webResource>
+                                                       
<directory>src/main/custom</directory>
+                                                       <includes>
+                                                               
<include>a2.txt</include>
+                                                       </includes>
+                                                       
<targetPath>x</targetPath>
+                                               </webResource>
+                                       </webResources>
+                               </configuration>
+                       </plugin>
+               </plugins>
+
+       </build>
+</project>
\ No newline at end of file
diff --git a/src/it/MWAR-371/custom/src/main/custom/a1.txt 
b/src/it/MWAR-371/custom/src/main/custom/a1.txt
new file mode 100644
index 0000000..7fe810a
--- /dev/null
+++ b/src/it/MWAR-371/custom/src/main/custom/a1.txt
@@ -0,0 +1,18 @@
+# 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.
+
+i'm custom
\ No newline at end of file
diff --git a/src/it/MWAR-371/custom/src/main/custom/a2.txt 
b/src/it/MWAR-371/custom/src/main/custom/a2.txt
new file mode 100644
index 0000000..7fe810a
--- /dev/null
+++ b/src/it/MWAR-371/custom/src/main/custom/a2.txt
@@ -0,0 +1,18 @@
+# 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.
+
+i'm custom
\ No newline at end of file
diff --git a/src/it/MWAR-371/generic/pom.xml b/src/it/MWAR-371/generic/pom.xml
new file mode 100644
index 0000000..beeef48
--- /dev/null
+++ b/src/it/MWAR-371/generic/pom.xml
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>mwar371</groupId>
+    <artifactId>mwar371</artifactId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>generic</artifactId>
+  <packaging>war</packaging>
+</project>
\ No newline at end of file
diff --git a/src/it/MWAR-371/generic/src/main/webapp/x/a1.txt 
b/src/it/MWAR-371/generic/src/main/webapp/x/a1.txt
new file mode 100644
index 0000000..fc4dee1
--- /dev/null
+++ b/src/it/MWAR-371/generic/src/main/webapp/x/a1.txt
@@ -0,0 +1,18 @@
+# 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.
+
+I'm generic
\ No newline at end of file
diff --git a/src/it/MWAR-371/generic/src/main/webapp/x/a2.txt 
b/src/it/MWAR-371/generic/src/main/webapp/x/a2.txt
new file mode 100644
index 0000000..fc4dee1
--- /dev/null
+++ b/src/it/MWAR-371/generic/src/main/webapp/x/a2.txt
@@ -0,0 +1,18 @@
+# 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.
+
+I'm generic
\ No newline at end of file
diff --git a/src/it/MWAR-371/generic/src/main/webapp/x/a3.txt 
b/src/it/MWAR-371/generic/src/main/webapp/x/a3.txt
new file mode 100644
index 0000000..fc4dee1
--- /dev/null
+++ b/src/it/MWAR-371/generic/src/main/webapp/x/a3.txt
@@ -0,0 +1,18 @@
+# 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.
+
+I'm generic
\ No newline at end of file
diff --git a/src/it/MWAR-371/pom.xml b/src/it/MWAR-371/pom.xml
new file mode 100644
index 0000000..1f72884
--- /dev/null
+++ b/src/it/MWAR-371/pom.xml
@@ -0,0 +1,51 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+       <modelVersion>4.0.0</modelVersion>
+       <groupId>mwar371</groupId>
+       <artifactId>mwar371</artifactId>
+       <version>1.0-SNAPSHOT</version>
+       <packaging>pom</packaging>
+  <name>Maven Integration Test :: MWAR-371</name> 
+  <description>MWAR-371 integration test</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+       
+       <modules>
+               <module>generic</module>
+               <module>custom</module>
+       </modules>
+       <build>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       
<artifactId>maven-war-plugin</artifactId>
+                                       <version>@project.version@</version>
+                                       <configuration>
+                                               
<failOnMissingWebXml>false</failOnMissingWebXml>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
\ No newline at end of file
diff --git a/src/it/MWAR-371/verify.groovy b/src/it/MWAR-371/verify.groovy
new file mode 100644
index 0000000..e66bcd5
--- /dev/null
+++ b/src/it/MWAR-371/verify.groovy
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+boolean checkFile( String fileName, String artifact, String module )
+{
+    def customA1 = new File( basedir, 
"${artifact}/target/${artifact}-1.0-SNAPSHOT/x/${fileName}" )
+    if ( ! customA1.exists() )
+    {
+        System.err.println( 
"${artifact}/target/${artifact}-1.0-SNAPSHOT/x/${fileName} does not exist." )
+        return false
+    }
+    if ( ! customA1.text.contains( module ) )
+    {
+        System.err.println( 
"${artifact}/target/${artifact}-1.0-SNAPSHOT/x/${fileName} is not ${module}." )
+        return false
+    }
+    return true
+}
+
+boolean checkFile( String fileName, String module )
+{
+    return checkFile( fileName, module, module )
+}
+
+try {
+    if ( ! checkFile( "a1.txt", "custom" ) )
+    {
+        return false
+    }
+    if ( ! checkFile( "a2.txt", "custom" ) )
+    {
+        return false
+    }
+    if ( ! checkFile( "a3.txt", "custom", "generic" ) )
+    {
+        return false
+    }
+    if ( ! checkFile( "a1.txt", "generic" ) )
+    {
+        return false
+    }
+    if ( ! checkFile( "a2.txt", "generic" ) )
+    {
+        return false
+    }
+    if ( ! checkFile( "a3.txt", "generic" ) )
+    {
+        return false
+    }
+}
+catch ( Throwable e )
+{
+    e.printStackTrace()
+    return false
+}
+
+return true
+
diff --git a/src/main/java/org/apache/maven/plugins/war/util/PathSet.java 
b/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
index ebf5469..4fdf7e6 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
@@ -20,7 +20,6 @@
  */
 
 import org.codehaus.plexus.util.DirectoryScanner;
-import org.codehaus.plexus.util.StringUtils;
 
 import java.io.File;
 import java.util.Collection;
@@ -42,25 +41,31 @@
 public class PathSet
     implements Iterable<String>
 {
-
+    private static final String SEPARATOR = "/";
+    private static final char SEPARATOR_CHAR = SEPARATOR.charAt( 0 );
     /**
      * Set of normalized paths
      */
-    private Set<String> pathsSet = new LinkedHashSet<String>();
+    private Set<String> pathsSet = new LinkedHashSet<>();
 
-    /**
-     * The method normalizes the path.
-     * <ul>
-     * <li>changes directory separator to unix's separator(/)</li>
-     * <li>deletes all trailing slashes</li>
-     * </ul>
-     *
-     * @param path to normalization
-     * @return normalized path
-     */
-    protected String normalizeFilePath( String path )
+    static String normalizeSubPath( String path )
     {
-        return normalizeFilePathStatic( path );
+        if ( path.isEmpty() )
+        {
+            return path;
+        }
+        String cleanPath = path.replaceAll( "[\\\\]+", SEPARATOR )
+                .replaceAll( "[/]+" , SEPARATOR );
+        cleanPath = cleanPath.charAt( 0 ) == SEPARATOR_CHAR ? 
cleanPath.substring( 1 ) : cleanPath;
+        if ( cleanPath.isEmpty() )
+        {
+            return cleanPath;
+        }
+        if ( cleanPath.charAt( cleanPath.length() - 1 ) == SEPARATOR_CHAR )
+        {
+            return cleanPath.substring( 0, cleanPath.length() - 1 );
+        }
+        return cleanPath;
     }
 
     /*-------------------- Business interface ------------------------------*/
@@ -100,7 +105,7 @@ public PathSet( String[] paths )
      */
     public void add( String path )
     {
-        pathsSet.add( normalizeFilePath( path ) );
+        pathsSet.add( normalizeSubPath( path ) );
     }
 
     /**
@@ -113,7 +118,7 @@ public void addAll( Collection<String> paths, String prefix 
)
     {
         for ( String val : paths )
         {
-            add( prefix + val );
+            add( prefix + SEPARATOR +  val );
         }
     }
 
@@ -127,7 +132,7 @@ public void addAll( String[] paths, String prefix )
     {
         for ( String val : paths )
         {
-            add( prefix + val );
+            add( prefix + SEPARATOR + val );
         }
     }
 
@@ -141,7 +146,7 @@ public void addAll( PathSet paths, String prefix )
     {
         for ( String path : paths )
         {
-            add( prefix + path );
+            add( prefix + SEPARATOR + path );
         }
     }
 
@@ -183,7 +188,7 @@ public void addAll( PathSet paths )
      */
     public boolean contains( String path )
     {
-        return pathsSet.contains( normalizeFilePath( path ) );
+        return pathsSet.contains( normalizeSubPath( path ) );
     }
 
     /**
@@ -194,9 +199,7 @@ public boolean contains( String path )
      */
     boolean remove( String path )
     {
-        final String normalizedPath = normalizeFilePath( path );
-        return pathsSet.remove( normalizedPath );
-
+        return pathsSet.remove( normalizeSubPath( path ) );
     }
 
     /**
@@ -226,10 +229,10 @@ boolean remove( String path )
      */
     public void addPrefix( String prefix )
     {
-        final Set<String> newSet = new HashSet<String>();
+        final Set<String> newSet = new HashSet<>();
         for ( String path : pathsSet )
         {
-            newSet.add( normalizeFilePath( prefix + path ) );
+            newSet.add( normalizeSubPath( prefix + path ) );
         }
         pathsSet = newSet;
     }
@@ -258,37 +261,4 @@ public void addAllFilesInDirectory( File directory, String 
prefix )
         addAll( scanner.getIncludedFiles(), prefix );
     }
 
-    /*-------------------- Universal static mathods ------------------------*/
-    /**
-     * The method normalizes the path.
-     * 
-     * <ul>
-     * <li>changes directory separator to unix's separator(/)</li>
-     * <li>deletes all trailing slashes</li>
-     * </ul>
-     *
-     * @param path to normalization
-     * @return normalized path
-     */
-    public static String normalizeFilePathStatic( String path )
-    {
-        return trimTrailingSlashes( StringUtils.replace( path, '\\', '/' ) );
-    }
-
-    /**
-     * The method deletes all trailing slashes from the given string
-     *
-     * @param str a string
-     * @return trimed string
-     */
-    public static String trimTrailingSlashes( String str )
-    {
-        int i;
-        for ( i = 0; i < str.length() && str.charAt( i ) == '/'; i++ )
-        {
-            // just calculate i
-        }
-        return str.substring( i );
-    }
-
 }
diff --git a/src/test/java/org/apache/maven/plugins/war/util/PathSetTest.java 
b/src/test/java/org/apache/maven/plugins/war/util/PathSetTest.java
index f644ed9..33f1011 100644
--- a/src/test/java/org/apache/maven/plugins/war/util/PathSetTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/util/PathSetTest.java
@@ -26,6 +26,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Path;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
@@ -37,45 +38,31 @@
     /* --------------- Normalization tests --------------*/
 
     /**
-     * Test method for 
'org.apache.maven.plugin.war.PathSet.normalizeFilePathStatic(String)'
+     * Test method for 
'org.apache.maven.plugin.war.PathSet.normalizeSubPath(String)'
      */
-    public void testNormalizeFilePathStatic()
+    public void testNormalizeSubPath()
     {
-        assertEquals( "Normalized path error", "", 
PathSet.normalizeFilePathStatic( "" ) );
-        assertEquals( "Normalized path error", "", 
PathSet.normalizeFilePathStatic( "/" ) );
-        assertEquals( "Normalized path error", "", 
PathSet.normalizeFilePathStatic( "////" ) );
-        assertEquals( "Normalized path error", "", 
PathSet.normalizeFilePathStatic( "\\" ) );
-        assertEquals( "Normalized path error", "", 
PathSet.normalizeFilePathStatic( "\\\\\\\\" ) );
-
-        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeFilePathStatic( "abc" ) );
-        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeFilePathStatic( "/abc" ) );
-        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeFilePathStatic( "////abc" ) );
-        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeFilePathStatic( "\\abc" ) );
-        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeFilePathStatic( "\\\\\\\\abc" ) );
-
-        assertEquals( "Normalized path error", "abc/def/xyz/", 
PathSet.normalizeFilePathStatic( "abc/def\\xyz\\" ) );
-        assertEquals( "Normalized path error", "abc/def/xyz/", 
PathSet.normalizeFilePathStatic( "/abc/def/xyz/" ) );
-        assertEquals( "Normalized path error", "abc/def/xyz/", 
PathSet.normalizeFilePathStatic( "////abc/def/xyz/" ) );
-        assertEquals( "Normalized path error", "abc/def/xyz/", 
PathSet.normalizeFilePathStatic( "\\abc/def/xyz/" ) );
-        assertEquals( "Normalized path error", "abc/def/xyz/",
-                      PathSet.normalizeFilePathStatic( "\\\\\\\\abc/def/xyz/" 
) );
-    }
-
-    /**
-     * Test method for 
'org.apache.maven.plugin.war.PathSet.trimTrailingSlashes(String)'
-     */
-    public void testTrimTrailingSlashes()
-    {
-        assertEquals( "Trimed path error", "", PathSet.trimTrailingSlashes( "" 
) );
-        assertEquals( "Trimed path error", "", PathSet.trimTrailingSlashes( 
"/" ) );
-        assertEquals( "Trimed path error", "", PathSet.trimTrailingSlashes( 
"//" ) );
-        assertEquals( "Trimed path error", "\\", PathSet.trimTrailingSlashes( 
"\\" ) );
-        assertEquals( "Trimed path error", "abc/def\\xyz\\", 
PathSet.trimTrailingSlashes( "abc/def\\xyz\\" ) );
-        assertEquals( "Trimed path error", "abc/def/xyz/", 
PathSet.trimTrailingSlashes( "/abc/def/xyz/" ) );
-        assertEquals( "Trimed path error", "abc/def/xyz/", 
PathSet.trimTrailingSlashes( "////abc/def/xyz/" ) );
-        assertEquals( "Trimed path error", "\\abc/def/xyz\\", 
PathSet.trimTrailingSlashes( "\\abc/def/xyz\\" ) );
-        assertEquals( "Trimed path error", "\\\\\\\\abc/def/xyz",
-                      PathSet.trimTrailingSlashes( "\\\\\\\\abc/def/xyz" ) );
+        assertEquals( "Normalized path error", "", PathSet.normalizeSubPath( 
"" ) );
+        assertEquals( "Normalized path error", "", PathSet.normalizeSubPath( 
"/" ) );
+        assertEquals( "Normalized path error", "", PathSet.normalizeSubPath( 
"////" ) );
+        assertEquals( "Normalized path error", "", PathSet.normalizeSubPath( 
"\\" ) );
+        assertEquals( "Normalized path error", "", PathSet.normalizeSubPath( 
"\\\\\\\\" ) );
+
+        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeSubPath( "abc" ) );
+        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeSubPath( "/abc" ) );
+        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeSubPath( "////abc" ) );
+        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeSubPath( "\\abc" ) );
+        assertEquals( "Normalized path error", "abc", 
PathSet.normalizeSubPath( "\\\\\\\\abc" ) );
+
+        assertEquals( "Normalized path error", "abc/def/xyz", 
PathSet.normalizeSubPath( "abc/def\\xyz\\" ) );
+        assertEquals( "Normalized path error", "abc/def/xyz", 
PathSet.normalizeSubPath( "/abc/def/xyz/" ) );
+        assertEquals( "Normalized path error", "abc/def/xyz", 
PathSet.normalizeSubPath( "////abc/def/xyz/" ) );
+        assertEquals( "Normalized path error", "abc/def/xyz", 
PathSet.normalizeSubPath( "\\abc/def/xyz/" ) );
+        assertEquals( "Normalized path error", "abc/def/xyz",
+                PathSet.normalizeSubPath( "\\\\\\\\abc/def/xyz/" ) );
+        // MWAR-371
+        assertEquals( "Normalized path error", "abc/def/ghi",
+                PathSet.normalizeSubPath( "///abc/////def////ghi//" ) );
     }
 
     /* -------------- Operations tests ------------------*/
@@ -115,9 +102,8 @@ public void testPathsSetBasic()
         assertEquals( "Unexpected PathSet size", ps.size(), 2 );
 
         int i = 0;
-        for (String p1 : ps) {
+        for (String pathstr : ps) {
             i++;
-            String pathstr = p1;
             assertTrue(ps.contains(pathstr));
             assertTrue(ps.contains("/" + pathstr));
             assertTrue(ps.contains("/" + StringUtils.replace(pathstr, '/', 
'\\')));
@@ -128,9 +114,8 @@ public void testPathsSetBasic()
 
         ps.addPrefix( "/ab/c/" );
         i = 0;
-        for (String p : ps) {
+        for (String pathstr : ps) {
             i++;
-            String pathstr = p;
             assertTrue(pathstr.startsWith("ab/c/"));
             assertFalse(pathstr.startsWith("ab/c//"));
             assertTrue(ps.contains(pathstr));
@@ -208,6 +193,9 @@ public void testPathsSetAddAlls()
             assertTrue(ps2.contains("/" + str));
         }
 
+        PathSet ps3 = new PathSet();
+        ps3.addAll(new String[]{ "a/b/c" }, "d");
+        assertTrue( "Unexpected PathSet path", ps3.contains( "d/a/b/c" ) );
     }
 
     /**


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to