Index: PathTest.java
===================================================================
RCS file: /home/cvspublic/jakarta-ant/src/testcases/org/apache/tools/ant/types/PathTest.java,v
retrieving revision 1.11
diff -u -r1.11 PathTest.java
--- PathTest.java	31 Oct 2001 11:05:00 -0000	1.11
+++ PathTest.java	8 Jan 2002 21:54:58 -0000
@@ -86,7 +86,7 @@
     }
 
     // actually tests constructor as well as setPath
-    public void testConstructor() {
+    public void testConstructorUnixStyle() {
         Path p = new Path(project, "/a:/b");
         String[] l = p.list();
         assertEquals("two items, Unix style", 2, l.length);
@@ -100,9 +100,11 @@
             assertEquals(":\\a", l[0].substring(1));
             assertEquals(":\\b", l[1].substring(1));
         }        
+    }
 
-        p = new Path(project, "\\a;\\b");
-        l = p.list();
+    public void testConstructorWindowsStyle() {
+        Path p = new Path(project, "\\a;\\b");
+        String[] l = p.list();
         assertEquals("two items, DOS style", 2, l.length);
         if (isUnixStyle) {
             assertEquals("/a", l[0]);
@@ -115,23 +117,6 @@
             assertEquals(":\\b", l[1].substring(1));
         }        
 
-        p = new Path(project, "\\a;\\b:/c");
-        l = p.list();
-        assertEquals("three items, mixed style", 3, l.length);
-        if (isUnixStyle) {
-            assertEquals("/a", l[0]);
-            assertEquals("/b", l[1]);
-            assertEquals("/c", l[2]);
-        } else if (isNetWare) {
-            assertEquals("\\a", l[0]);
-            assertEquals("\\b", l[1]);
-            assertEquals("\\c", l[2]);
-        } else {
-            assertEquals(":\\a", l[0].substring(1));
-            assertEquals(":\\b", l[1].substring(1));
-            assertEquals(":\\c", l[2].substring(1));
-        }        
-
         p = new Path(project, "c:\\test");
         l = p.list();
         if (isUnixStyle) {
@@ -144,7 +129,27 @@
             assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
         } else {
             assertEquals("drives on DOS", 1, l.length);
+            assertEquals("c:\\test", l[0].toLowerCase());
+        }
+
+        p = new Path(project, "c:\\test;d:\\programs");
+        l = p.list();
+        if (isUnixStyle) {
+            assertEquals("no drives on Unix", 4, l.length);
+            assertTrue("c resolved relative to project\'s basedir", 
+                   l[0].endsWith("/c"));
+            assertEquals("/test", l[1]);
+            assertTrue("d resolved relative to project\'s basedir", 
+                   l[2].endsWith("/d"));
+            assertEquals("/programs", l[3]);
+        } else if (isNetWare) {
+            assertEquals("volumes on NetWare", 2, l.length);
             assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
+            assertEquals("d:\\programs", l[1].toLowerCase(Locale.US));
+        } else {
+            assertEquals("drives on DOS", 2, l.length);
+            assertEquals("c:\\test", l[0].toLowerCase());
+            assertEquals("d:\\programs", l[1].toLowerCase());
         }
 
         p = new Path(project, "c:/test");
@@ -159,8 +164,141 @@
             assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
         } else {
             assertEquals("drives on DOS", 1, l.length);
+            assertEquals("c:\\test", l[0].toLowerCase());
+        }
+
+        p = new Path(project, "c:/test;d:/programs");
+        l = p.list();
+        if (isUnixStyle) {
+            assertEquals("no drives on Unix", 4, l.length);
+            assertTrue("c resolved relative to project\'s basedir", 
+                   l[0].endsWith("/c"));
+            assertEquals("/test", l[1]);
+            assertTrue("d resolved relative to project\'s basedir", 
+                   l[2].endsWith("/d"));
+            assertEquals("/programs", l[3]);
+        } else if (isNetWare) {
+            assertEquals("volumes on NetWare", 2, l.length);
             assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
+            assertEquals("d:\\programs", l[1].toLowerCase(Locale.US));
+        } else {
+            assertEquals("drives on DOS", 2, l.length);
+            assertEquals("c:\\test", l[0].toLowerCase());
+            assertEquals("d:\\programs", l[1].toLowerCase());
+        }
+    }
+
+    public void testConstructorNetWareStyle() {
+        // try a netware-volume length path, see how it is handled
+        Path p = new Path(project, "sys:\\test");
+        String[] l = p.list();
+        if (isUnixStyle) {
+            assertEquals("no drives on Unix", 2, l.length);
+            assertTrue("sys resolved relative to project\'s basedir", 
+                   l[0].endsWith("/sys"));
+            assertEquals("/test", l[1]);
+        } else if (isNetWare) {
+            assertEquals("sys:\\test", l[0].toLowerCase(Locale.US));
+            assertEquals("volumes on NetWare", 1, l.length);
+        } else {
+            assertEquals("no multiple character-length volumes on Windows", 2, l.length);
+            assertTrue("sys resolved relative to project\'s basedir", 
+                   l[0].endsWith("\\sys"));
+            assertTrue("test resolved relative to project\'s basedir", 
+                   l[1].endsWith("\\test"));
+        }
+
+        // try a multi-part netware-volume length path, see how it is handled
+        p = new Path(project, "sys:\\test;dev:\\temp");
+        l = p.list();
+        if (isUnixStyle) {
+            assertEquals("no drives on Unix", 4, l.length);
+            assertTrue("sys resolved relative to project\'s basedir", 
+                   l[0].endsWith("/sys"));
+            assertEquals("/test", l[1]);
+            assertTrue("dev resolved relative to project\'s basedir", 
+                   l[2].endsWith("/dev"));
+            assertEquals("/temp", l[3]);
+        } else if (isNetWare) {
+            assertEquals("volumes on NetWare", 2, l.length);
+            assertEquals("sys:\\test", l[0].toLowerCase(Locale.US));
+            assertEquals("dev:\\temp", l[1].toLowerCase(Locale.US));
+        } else {
+            assertEquals("no multiple character-length volumes on Windows", 4, l.length);
+            assertTrue("sys resolved relative to project\'s basedir", 
+                   l[0].endsWith("\\sys"));
+            assertTrue("test resolved relative to project\'s basedir", 
+                   l[1].endsWith("\\test"));
+            assertTrue("dev resolved relative to project\'s basedir", 
+                   l[2].endsWith("\\dev"));
+            assertTrue("temp resolved relative to project\'s basedir", 
+                   l[3].endsWith("\\temp"));
+        }
+
+        // try a netware-volume length path w/forward slash, see how it is handled
+        p = new Path(project, "sys:/test");
+        l = p.list();
+        if (isUnixStyle) {
+            assertEquals("no drives on Unix", 2, l.length);
+            assertTrue("sys resolved relative to project\'s basedir", 
+                   l[0].endsWith("/sys"));
+            assertEquals("/test", l[1]);
+        } else if (isNetWare) {
+            assertEquals("volumes on NetWare", 1, l.length);
+            assertEquals("sys:\\test", l[0].toLowerCase(Locale.US));
+        } else {
+            assertEquals("no multiple character-length volumes on Windows", 2, l.length);
+            assertTrue("sys resolved relative to project\'s basedir", 
+                   l[0].endsWith("\\sys"));
+            assertTrue("test resolved relative to project\'s basedir", 
+                   l[1].endsWith("\\test"));
+        }
+
+        // try a multi-part netware-volume length path w/forward slash, see how it is handled
+        p = new Path(project, "sys:/test;dev:/temp");
+        l = p.list();
+        if (isUnixStyle) {
+            assertEquals("no drives on Unix", 4, l.length);
+            assertTrue("sys resolved relative to project\'s basedir", 
+                   l[0].endsWith("/sys"));
+            assertEquals("/test", l[1]);
+            assertTrue("dev resolved relative to project\'s basedir", 
+                   l[2].endsWith("/dev"));
+            assertEquals("/temp", l[3]);
+        } else if (isNetWare) {
+            assertEquals("volumes on NetWare", 2, l.length);
+            assertEquals("sys:\\test", l[0].toLowerCase(Locale.US));
+            assertEquals("dev:\\temp", l[1].toLowerCase(Locale.US));
+        } else {
+            assertEquals("no multiple character-length volumes on Windows", 4, l.length);
+            assertTrue("sys resolved relative to project\'s basedir", 
+                   l[0].endsWith("\\sys"));
+            assertTrue("test resolved relative to project\'s basedir", 
+                   l[1].endsWith("\\test"));
+            assertTrue("dev resolved relative to project\'s basedir", 
+                   l[2].endsWith("\\dev"));
+            assertTrue("temp resolved relative to project\'s basedir", 
+                   l[3].endsWith("\\temp"));
         }
+    }
+
+    public void testConstructorMixedStyle() {
+        Path p = new Path(project, "\\a;\\b:/c");
+        String[] l = p.list();
+        assertEquals("three items, mixed style", 3, l.length);
+        if (isUnixStyle) {
+            assertEquals("/a", l[0]);
+            assertEquals("/b", l[1]);
+            assertEquals("/c", l[2]);
+        } else if (isNetWare) {
+            assertEquals("\\a", l[0]);
+            assertEquals("\\b", l[1]);
+            assertEquals("\\c", l[2]);
+        } else {
+            assertEquals(":\\a", l[0].substring(1));
+            assertEquals(":\\b", l[1].substring(1));
+            assertEquals(":\\c", l[2].substring(1));
+        }        
     }
 
     public void testSetLocation() {

