Merge branch '1.4.x' into 1.5.x

This commit is contained in:
Andy Wilkinson 2016-10-26 12:13:26 +01:00
commit 6b3eede59f
2 changed files with 41 additions and 11 deletions

View File

@ -198,23 +198,23 @@ public class Handler extends URLStreamHandler {
@Override
protected boolean sameFile(URL u1, URL u2) {
if (!u1.getProtocol().equals("jar") || u2.getProtocol().equals("jar")) {
return super.sameFile(u1, u2);
if (!u1.getProtocol().equals("jar") || !u2.getProtocol().equals("jar")) {
return false;
}
int separator1 = u1.getFile().indexOf(SEPARATOR);
int separator2 = u1.getFile().indexOf(SEPARATOR);
if (separator1 < 0 || separator2 < 0) {
int separator2 = u2.getFile().indexOf(SEPARATOR);
if (separator1 == -1 || separator2 == -1) {
return super.sameFile(u1, u2);
}
String root1 = u1.getFile().substring(separator1 + SEPARATOR.length());
String root2 = u2.getFile().substring(separator2 + SEPARATOR.length());
if (!root1.equals(root2)) {
return super.sameFile(u1, u2);
String nested1 = u1.getFile().substring(separator1 + SEPARATOR.length());
String nested2 = u2.getFile().substring(separator2 + SEPARATOR.length());
if (!nested1.equals(nested2)) {
return false;
}
String nested1 = u1.getFile().substring(0, separator1);
String nested2 = u1.getFile().substring(0, separator2);
String root1 = u1.getFile().substring(0, separator1);
String root2 = u2.getFile().substring(0, separator2);
try {
return super.sameFile(new URL(nested1), new URL(nested2));
return super.sameFile(new URL(root1), new URL(root2));
}
catch (MalformedURLException ex) {
// Continue

View File

@ -89,6 +89,36 @@ public class HandlerTests {
.isEqualTo("jar:jar:file:/other.jar!/nested!/entry.txt");
}
@Test
public void sameFileReturnsFalseForUrlsWithDifferentProtocols()
throws MalformedURLException {
assertThat(this.handler.sameFile(new URL("jar:file:foo.jar!/content.txt"),
new URL("file:/foo.jar"))).isFalse();
}
@Test
public void sameFileReturnsFalseForDifferentFileInSameJar()
throws MalformedURLException {
assertThat(this.handler.sameFile(
new URL("jar:file:foo.jar!/the/path/to/the/first/content.txt"),
new URL("jar:file:/foo.jar!/content.txt"))).isFalse();
}
@Test
public void sameFileReturnsFalseForSameFileInDifferentJars()
throws MalformedURLException {
assertThat(this.handler.sameFile(
new URL("jar:file:/the/path/to/the/first.jar!/content.txt"),
new URL("jar:file:/second.jar!/content.txt"))).isFalse();
}
@Test
public void sameFileReturnsTrueForSameFileInSameJar() throws MalformedURLException {
assertThat(this.handler.sameFile(
new URL("jar:file:/the/path/to/the/first.jar!/content.txt"),
new URL("jar:file:/the/path/to/the/first.jar!/content.txt"))).isTrue();
}
private URL createUrl(String file) throws MalformedURLException {
return new URL("jar", null, -1, file, this.handler);
}