Skip to content

Commit

Permalink
修正代码确保在windows下可测试通过
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Zhou committed Sep 24, 2011
1 parent 374d82c commit cc3d7c5
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,8 @@ public static String normalizeExtension(String ext) {
return ext;
}

private static final Pattern schemePrefixPattern = Pattern.compile("(\\w+://.+?/)|((jar|zip):.+!/)|(\\w+:)");
private static final Pattern schemePrefixPattern = Pattern.compile(
"(file:/*[a-z]:)|(\\w+://.+?/)|((jar|zip):.+!/)|(\\w+:)", Pattern.CASE_INSENSITIVE);

/**
* 根据指定url和相对路径,计算出相对路径所对应的完整url。类似于<code>URI.resolve()</code>
Expand Down
115 changes: 111 additions & 4 deletions common/util/src/test/java/com/alibaba/citrus/util/FileUtilTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,40 @@ private void assertExts(String path, String ext, FileNameAndExtension result, St

@Test
public void resolve() {
// form1: http://server/...
// form1: file:/c:...
assertEquals("file:c:/aa/bb/xx/yy", FileUtil.resolve("file:c:aa/bb/cc", "xx/yy"));
assertEquals("file:/z:/aa/xx/yy", FileUtil.resolve("file:/z:aa/bb/cc", "../xx/yy"));
assertEquals("file://z:/aa/xx/yy", FileUtil.resolve("file://z:aa/bb/cc", "../xx/yy"));

try {
FileUtil.resolve("file:h:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}

try {
FileUtil.resolve("file:/z:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}

try {
FileUtil.resolve("file://z:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}

try {
FileUtil.resolve("file:///z:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}

// form2: http://server/...
assertEquals("http://www.taobao.com:8080/aa/bb/xx/yy",
FileUtil.resolve("http://www.taobao.com:8080/aa/bb/cc", "xx/yy"));

Expand All @@ -496,7 +529,7 @@ public void resolve() {
assertThat(e, exception("/aa/bb/cc/../../../../xx/yy"));
}

// form2: jar:url!/...
// form3: jar:url!/...
assertEquals("jar:http://www.taobao.com:8080/my.jar!/aa/bb/xx/yy",
FileUtil.resolve("jar:http://www.taobao.com:8080/my.jar!/aa/bb/cc", "xx/yy"));

Expand All @@ -510,9 +543,8 @@ public void resolve() {
assertThat(e, exception("/aa/bb/cc/../../../../xx/yy"));
}

// form3: file:/...
// form4: file:/...
assertEquals("file:/aa/bb/xx/yy", FileUtil.resolve("file:aa/bb/cc", "xx/yy"));

assertEquals("file:/aa/xx/yy", FileUtil.resolve("file:aa/bb/cc", "../xx/yy"));

try {
Expand All @@ -522,4 +554,79 @@ public void resolve() {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}
}

@Test
public void resolve_uppercase() {
// form1: FILE:/C:...
assertEquals("FILE:C:/aa/bb/xx/yy", FileUtil.resolve("FILE:C:aa/bb/cc", "xx/yy"));
assertEquals("FILE:/Z:/aa/xx/yy", FileUtil.resolve("FILE:/Z:aa/bb/cc", "../xx/yy"));
assertEquals("FILE://Z:/aa/xx/yy", FileUtil.resolve("FILE://Z:aa/bb/cc", "../xx/yy"));

try {
FileUtil.resolve("FILE:H:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}

try {
FileUtil.resolve("FILE:/Z:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}

try {
FileUtil.resolve("FILE://Z:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}

try {
FileUtil.resolve("FILE:///Z:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}

// form2: HTTP://server/...
assertEquals("HTTP://www.taobao.com:8080/aa/bb/xx/yy",
FileUtil.resolve("HTTP://www.taobao.com:8080/aa/bb/cc", "xx/yy"));

assertEquals("HTTP://www.taobao.com:8080/aa/xx/yy",
FileUtil.resolve("HTTP://www.taobao.com:8080/aa/bb/cc", "../xx/yy"));

try {
FileUtil.resolve("HTTP://www.taobao.com:8080/aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("/aa/bb/cc/../../../../xx/yy"));
}

// form3: JAR:url!/...
assertEquals("JAR:HTTP://www.taobao.com:8080/my.jar!/aa/bb/xx/yy",
FileUtil.resolve("JAR:HTTP://www.taobao.com:8080/my.jar!/aa/bb/cc", "xx/yy"));

assertEquals("JAR:HTTP://www.taobao.com:8080/my.jar!/aa/xx/yy",
FileUtil.resolve("JAR:HTTP://www.taobao.com:8080/my.jar!/aa/bb/cc", "../xx/yy"));

try {
FileUtil.resolve("zip:HTTP://www.taobao.com:8080/my.jar!/aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("/aa/bb/cc/../../../../xx/yy"));
}

// form4: FILE:/...
assertEquals("FILE:/aa/bb/xx/yy", FileUtil.resolve("FILE:aa/bb/cc", "xx/yy"));
assertEquals("FILE:/aa/xx/yy", FileUtil.resolve("FILE:aa/bb/cc", "../xx/yy"));

try {
FileUtil.resolve("FILE:aa/bb/cc", "../../../xx/yy");
fail();
} catch (IllegalPathException e) {
assertThat(e, exception("aa/bb/cc/../../../../xx/yy"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public void passthru() throws Exception {
invokeServlet("/app1/plaintext2.txt");

assertEquals(200, clientResponseCode);
assertEquals("hello!\n", clientResponseContent); // text from valve
assertEquals("hello!", clientResponseContent.trim()); // text from valve
}

@Test
Expand Down

0 comments on commit cc3d7c5

Please sign in to comment.