Merge branch '1.5.x'

pull/7233/head
Andy Wilkinson 8 years ago
commit f2c7e22731

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

@ -89,6 +89,36 @@ public class HandlerTests {
.isEqualTo("jar:jar:file:/other.jar!/nested!/entry.txt"); .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 { private URL createUrl(String file) throws MalformedURLException {
return new URL("jar", null, -1, file, this.handler); return new URL("jar", null, -1, file, this.handler);
} }

Loading…
Cancel
Save