提交 2f683af7 编写于 作者: D Dániel Bali 提交者: Fabian Hueske

Fix issue where Windows paths were not recognized as absolute

Added Windows test cases to Path tests

This closes #491
上级 5cd9e9d9
......@@ -30,7 +30,6 @@ import java.net.URISyntaxException;
import org.apache.flink.core.io.IOReadableWritable;
import org.apache.flink.core.memory.DataInputView;
import org.apache.flink.core.memory.DataOutputView;
import org.apache.flink.util.OperatingSystem;
import org.apache.flink.util.StringUtils;
/**
......@@ -278,9 +277,6 @@ public class Path implements IOReadableWritable, Serializable {
* @return <code>true</code> if the path string contains a windows drive letter, <code>false</code> otherwise
*/
private boolean hasWindowsDrive(String path, boolean slashed) {
if (!OperatingSystem.isWindows()) {
return false;
}
final int start = slashed ? 1 : 0;
return path.length() >= start + 2
&& (!slashed || path.charAt(0) == '/')
......@@ -316,7 +312,10 @@ public class Path implements IOReadableWritable, Serializable {
*/
public boolean isAbsolute() {
final int start = hasWindowsDrive(uri.getPath(), true) ? 3 : 0;
return uri.getPath().startsWith(SEPARATOR, start);
if (uri.getPath().length() > start) {
return uri.getPath().startsWith(SEPARATOR, start);
}
return true;
}
/**
......
......@@ -63,6 +63,15 @@ public class PathTest {
assertEquals("/my/path", p.toUri().getPath());
assertEquals("file", p.toUri().getScheme());
p = new Path("C:/my/windows/path");
assertEquals("/C:/my/windows/path", p.toUri().getPath());
p = new Path("file:/C:/my/windows/path");
assertEquals("/C:/my/windows/path", p.toUri().getPath());
p = new Path("C:");
assertEquals("/C:", p.toUri().getPath());
try {
new Path((String)null);
fail();
......@@ -95,6 +104,15 @@ public class PathTest {
p = new Path("./my/rel/path");
assertFalse(p.isAbsolute());
p = new Path("C:/my/abs/windows/path");
assertTrue(p.isAbsolute());
p = new Path("file:/C:");
assertTrue(p.isAbsolute());
p = new Path("C:");
assertTrue(p.isAbsolute());
}
@Test
......@@ -115,6 +133,12 @@ public class PathTest {
p = new Path("/");
assertEquals("", p.getName());
p = new Path("C:/my/windows/path");
assertEquals("path", p.getName());
p = new Path("file:/C:/my/windows/path");
assertEquals("path", p.getName());
}
@Test
......@@ -134,6 +158,9 @@ public class PathTest {
p = new Path("/");
assertNull(p.getParent());
p = new Path("C:/my/windows/path");
assertEquals("/C:/my/windows", p.getParent().toUri().getPath());
}
@Test
......@@ -147,6 +174,10 @@ public class PathTest {
p = p.suffix("/abc");
assertEquals("/my/path/abc", p.toUri().getPath());
p = new Path("C:/my/windows/path");
p = p.suffix("/abc");
assertEquals("/C:/my/windows/path/abc", p.toUri().getPath());
}
@Test
......@@ -163,6 +194,9 @@ public class PathTest {
p = new Path("/");
assertEquals(0, p.depth());
p = new Path("C:/my/windows/path");
assertEquals(4, p.depth());
}
@Test
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册