diff options
author | Shawn Pearce <spearce@spearce.org> | 2011-12-02 10:01:22 -0500 |
---|---|---|
committer | Code Review <codereview-daemon@eclipse.org> | 2011-12-02 10:01:22 -0500 |
commit | e0f2be968b147ff7043684a7715d2fe852553db4 (patch) | |
tree | fe0c139b43d33be076aeb757ffc3795e6f609a6c /org.eclipse.jgit.test/tst/org/eclipse/jgit | |
parent | cea935ab1b6caf52b31dfd4eae9696dfcc0593a2 (diff) | |
parent | 00514bde50de77380082e57da7a3cde2d714c733 (diff) | |
download | jgit-e0f2be968b147ff7043684a7715d2fe852553db4.tar.gz jgit-e0f2be968b147ff7043684a7715d2fe852553db4.zip |
Merge "Add percent-encoding of reserved characters in URIish"
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse/jgit')
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java | 230 |
1 files changed, 218 insertions, 12 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java index d797dd435e..b5a753bbba 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/URIishTest.java @@ -88,8 +88,10 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertFalse(u.isRemote()); + assertEquals(str, u.getRawPath()); assertEquals(str, u.getPath()); assertEquals(str, u.toString()); + assertEquals(str, u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -99,8 +101,10 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertFalse(u.isRemote()); + assertEquals(str, u.getRawPath()); assertEquals(str, u.getPath()); assertEquals(str, u.toString()); + assertEquals(str, u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -110,8 +114,10 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertFalse(u.isRemote()); + assertEquals("D:\\m y", u.getRawPath()); assertEquals("D:\\m y", u.getPath()); assertEquals("D:\\m y", u.toString()); + assertEquals("D:\\m y", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -121,8 +127,10 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertFalse(u.isRemote()); + assertEquals(str, u.getRawPath()); assertEquals(str, u.getPath()); assertEquals(str, u.toString()); + assertEquals(str, u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -132,8 +140,10 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertFalse(u.isRemote()); + assertEquals("\\\\some\\place", u.getRawPath()); assertEquals("\\\\some\\place", u.getPath()); assertEquals("\\\\some\\place", u.toString()); + assertEquals("\\\\some\\place", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -143,8 +153,49 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("file", u.getScheme()); assertFalse(u.isRemote()); + assertEquals("/home/m y", u.getRawPath()); assertEquals("/home/m y", u.getPath()); - assertEquals(str, u.toString()); + assertEquals("file:///home/m y", u.toString()); + assertEquals("file:///home/m%20y", u.toASCIIString()); + assertEquals(u, new URIish(str)); + } + + @Test + public void testURIEncode_00() throws Exception { + final String str = "file:///home/m%00y"; + URIish u = new URIish(str); + assertEquals("file", u.getScheme()); + assertFalse(u.isRemote()); + assertEquals("/home/m%00y", u.getRawPath()); + assertEquals("/home/m\u0000y", u.getPath()); + assertEquals("file:///home/m%00y", u.toString()); + assertEquals("file:///home/m%00y", u.toASCIIString()); + assertEquals(u, new URIish(str)); + } + + @Test + public void testURIEncode_0a() throws Exception { + final String str = "file:///home/m%0ay"; + URIish u = new URIish(str); + assertEquals("file", u.getScheme()); + assertFalse(u.isRemote()); + assertEquals("/home/m%0ay", u.getRawPath()); + assertEquals("/home/m\ny", u.getPath()); + assertEquals("file:///home/m%0ay", u.toString()); + assertEquals("file:///home/m%0ay", u.toASCIIString()); + assertEquals(u, new URIish(str)); + } + + @Test + public void testURIEncode_unicode() throws Exception { + final String str = "file:///home/m%c3%a5y"; + URIish u = new URIish(str); + assertEquals("file", u.getScheme()); + assertFalse(u.isRemote()); + assertEquals("/home/m%c3%a5y", u.getRawPath()); + assertEquals("/home/m\u00e5y", u.getPath()); + assertEquals("file:///home/m%c3%a5y", u.toString()); + assertEquals("file:///home/m%c3%a5y", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -154,8 +205,10 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("file", u.getScheme()); assertFalse(u.isRemote()); + assertEquals("D:/m y", u.getRawPath()); assertEquals("D:/m y", u.getPath()); - assertEquals(str, u.toString()); + assertEquals("file:///D:/m y", u.toString()); + assertEquals("file:///D:/m%20y", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -166,8 +219,10 @@ public class URIishTest { assertEquals("git", u.getScheme()); assertTrue(u.isRemote()); assertEquals("example.com", u.getHost()); + assertEquals("/home/m y", u.getRawPath()); assertEquals("/home/m y", u.getPath()); - assertEquals(str, u.toString()); + assertEquals("git://example.com/home/m y", u.toString()); + assertEquals("git://example.com/home/m%20y", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -178,9 +233,11 @@ public class URIishTest { assertEquals("git", u.getScheme()); assertTrue(u.isRemote()); assertEquals("example.com", u.getHost()); + assertEquals("/home/m y", u.getRawPath()); assertEquals("/home/m y", u.getPath()); assertEquals(333, u.getPort()); - assertEquals(str, u.toString()); + assertEquals("git://example.com:333/home/m y", u.toString()); + assertEquals("git://example.com:333/home/m%20y", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -190,10 +247,12 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("git", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("D:/m y", u.getRawPath()); assertEquals("D:/m y", u.getPath()); assertEquals(338, u.getPort()); assertEquals("example.com", u.getHost()); - assertEquals(str, u.toString()); + assertEquals("git://example.com:338/D:/m y", u.toString()); + assertEquals("git://example.com:338/D:/m%20y", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -203,10 +262,27 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("git", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("D:/m y", u.getRawPath()); assertEquals("D:/m y", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals(-1, u.getPort()); + assertEquals("git://example.com/D:/m y", u.toString()); + assertEquals("git://example.com/D:/m%20y", u.toASCIIString()); + assertEquals(u, new URIish(str)); + } + + @Test + public void testScpStyleNoURIDecoding() throws Exception { + final String str = "example.com:some/p%20ath"; + URIish u = new URIish(str); + assertNull(u.getScheme()); + assertTrue(u.isRemote()); + assertEquals("some/p%20ath", u.getRawPath()); + assertEquals("some/p%20ath", u.getPath()); + assertEquals("example.com", u.getHost()); + assertEquals(-1, u.getPort()); assertEquals(str, u.toString()); + assertEquals(str, u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -216,10 +292,12 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertTrue(u.isRemote()); + assertEquals("some/p ath", u.getRawPath()); assertEquals("some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals(-1, u.getPort()); assertEquals(str, u.toString()); + assertEquals(str, u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -229,10 +307,12 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertTrue(u.isRemote()); + assertEquals("/some/p ath", u.getRawPath()); assertEquals("/some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals(-1, u.getPort()); assertEquals(str, u.toString()); + assertEquals(str, u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -242,11 +322,13 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertTrue(u.isRemote()); + assertEquals("some/p ath", u.getRawPath()); assertEquals("some/p ath", u.getPath()); assertEquals("user", u.getUser()); assertEquals("example.com", u.getHost()); assertEquals(-1, u.getPort()); assertEquals(str, u.toString()); + assertEquals(str, u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -256,10 +338,12 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("git+ssh", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("/some/p ath", u.getRawPath()); assertEquals("/some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals(-1, u.getPort()); - assertEquals(str, u.toString()); + assertEquals("git+ssh://example.com/some/p ath", u.toString()); + assertEquals("git+ssh://example.com/some/p%20ath", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -269,10 +353,12 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("ssh+git", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("/some/p ath", u.getRawPath()); assertEquals("/some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals(-1, u.getPort()); - assertEquals(str, u.toString()); + assertEquals("ssh+git://example.com/some/p ath", u.toString()); + assertEquals("ssh+git://example.com/some/p%20ath", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -282,10 +368,12 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("ssh", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("/some/p ath", u.getRawPath()); assertEquals("/some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals(-1, u.getPort()); - assertEquals(str, u.toString()); + assertEquals("ssh://example.com/some/p ath", u.toString()); + assertEquals("ssh://example.com/some/p%20ath", u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -295,12 +383,15 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("ssh", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("/some/p ath", u.getRawPath()); assertEquals("/some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals("user", u.getUser()); assertNull(u.getPass()); assertEquals(33, u.getPort()); - assertEquals(str, u.toString()); + assertEquals("ssh://user@example.com:33/some/p ath", u.toString()); + assertEquals("ssh://user@example.com:33/some/p%20ath", + u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -310,13 +401,18 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("ssh", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("/some/p ath", u.getRawPath()); assertEquals("/some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals("user", u.getUser()); assertEquals("pass", u.getPass()); assertEquals(33, u.getPort()); - assertEquals(str, u.toPrivateString()); + assertEquals("ssh://user:pass@example.com:33/some/p ath", + u.toPrivateString()); + assertEquals("ssh://user:pass@example.com:33/some/p%20ath", + u.toPrivateASCIIString()); assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -326,13 +422,62 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("ssh", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("/some/p ath", u.getRawPath()); assertEquals("/some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertEquals("DOMAIN\\user", u.getUser()); assertEquals("pass", u.getPass()); assertEquals(33, u.getPort()); - assertEquals(str, u.toPrivateString()); + assertEquals("ssh://DOMAIN\\user:pass@example.com:33/some/p ath", + u.toPrivateString()); + assertEquals("ssh://DOMAIN\\user:pass@example.com:33/some/p%20ath", + u.toPrivateASCIIString()); + assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString()); + assertEquals(u, new URIish(str)); + } + + @Test + public void testSshProtoWithEscapedADUserPassAndPort() throws Exception { + final String str = "ssh://DOMAIN%5c\u00fcser:pass@example.com:33/some/p ath"; + URIish u = new URIish(str); + assertEquals("ssh", u.getScheme()); + assertTrue(u.isRemote()); + assertEquals("/some/p ath", u.getRawPath()); + assertEquals("/some/p ath", u.getPath()); + assertEquals("example.com", u.getHost()); + assertEquals("DOMAIN\\\u00fcser", u.getUser()); + assertEquals("pass", u.getPass()); + assertEquals(33, u.getPort()); + assertEquals("ssh://DOMAIN\\\u00fcser:pass@example.com:33/some/p ath", + u.toPrivateString()); + assertEquals( + "ssh://DOMAIN\\%c3%bcser:pass@example.com:33/some/p%20ath", + u.toPrivateASCIIString()); + assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString()); + assertEquals(u, new URIish(str)); + } + + @Test + public void testURIEncodeDecode() throws Exception { + final String str = "ssh://%3ax%25:%40%41x@example.com:33/some%c3%a5/p%20a th"; + URIish u = new URIish(str); + assertEquals("ssh", u.getScheme()); + assertTrue(u.isRemote()); + assertEquals("/some%c3%a5/p%20a th", u.getRawPath()); + assertEquals("/some\u00e5/p a th", u.getPath()); + assertEquals("example.com", u.getHost()); + assertEquals(":x%", u.getUser()); + assertEquals("@Ax", u.getPass()); + assertEquals(33, u.getPort()); + assertEquals("ssh://%3ax%25:%40Ax@example.com:33/some%c3%a5/p%20a th", + u.toPrivateString()); + assertEquals( + "ssh://%3ax%25:%40Ax@example.com:33/some%c3%a5/p%20a%20th", + u.toPrivateASCIIString()); assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -342,13 +487,17 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("git", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("~some/p ath", u.getRawPath()); assertEquals("~some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertNull(u.getUser()); assertNull(u.getPass()); assertEquals(-1, u.getPort()); - assertEquals(str, u.toPrivateString()); + assertEquals("git://example.com/~some/p ath", u.toPrivateString()); + assertEquals("git://example.com/~some/p%20ath", + u.toPrivateASCIIString()); assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -359,13 +508,16 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("git", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("~some/p ath", u.getRawPath()); assertEquals("~some/p ath", u.getPath()); assertEquals("example.com", u.getHost()); assertNull(u.getUser()); assertNull(u.getPass()); assertEquals(-1, u.getPort()); assertEquals(str, u.toPrivateString()); + assertEquals(str, u.toPrivateASCIIString()); assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -375,13 +527,16 @@ public class URIishTest { URIish u = new URIish(str); assertNull(u.getScheme()); assertFalse(u.isRemote()); + assertEquals("/~some/p ath", u.getRawPath()); assertEquals("/~some/p ath", u.getPath()); assertNull(u.getHost()); assertNull(u.getUser()); assertNull(u.getPass()); assertEquals(-1, u.getPort()); assertEquals(str, u.toPrivateString()); + assertEquals(str, u.toPrivateASCIIString()); assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString()); assertEquals(u, new URIish(str)); } @@ -416,6 +571,33 @@ public class URIishTest { } @Test + public void testGetSet() throws Exception { + final String str = "ssh://DOMAIN\\user:pass@example.com:33/some/p ath%20"; + URIish u = new URIish(str); + u = u.setHost(u.getHost()); + u = u.setPass(u.getPass()); + u = u.setPort(u.getPort()); + assertEquals("ssh", u.getScheme()); + assertTrue(u.isRemote()); + u = u.setRawPath(u.getRawPath()); + assertEquals("/some/p ath%20", u.getRawPath()); + u = u.setPath(u.getPath()); + assertEquals("/some/p ath ", u.getRawPath()); + assertEquals("/some/p ath ", u.getPath()); + assertEquals("example.com", u.getHost()); + assertEquals("DOMAIN\\user", u.getUser()); + assertEquals("pass", u.getPass()); + assertEquals(33, u.getPort()); + assertEquals("ssh://DOMAIN\\user:pass@example.com:33/some/p ath ", + u.toPrivateString()); + assertEquals("ssh://DOMAIN\\user:pass@example.com:33/some/p%20ath%20", + u.toPrivateASCIIString()); + assertEquals(u.setPass(null).toPrivateString(), u.toString()); + assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString()); + assertEquals(u, new URIish(str)); + } + + @Test public void testGetValidWithEmptySlashDotGitHumanishName() throws IllegalArgumentException, URISyntaxException { String humanishName = new URIish("/a/b/.git").getHumanishName(); @@ -537,6 +719,7 @@ public class URIishTest { URIish u = new URIish(str); assertEquals("http", u.getScheme()); assertTrue(u.isRemote()); + assertEquals("/some/path", u.getRawPath()); assertEquals("/some/path", u.getPath()); assertEquals("host.xy", u.getHost()); assertEquals(80, u.getPort()); @@ -556,6 +739,27 @@ public class URIishTest { assertEquals(u, new URIish(str)); } + /** + * Exemplify what happens with the special case of encoding '/' as %2F. Web + * services in general parse path components before decoding the characters. + * + * @throws URISyntaxException + */ + @Test + public void testPathSeparator() throws URISyntaxException { + String str = "http://user:secret@host.xy:80/some%2Fpath"; + URIish u = new URIish(str); + assertEquals("http", u.getScheme()); + assertTrue(u.isRemote()); + assertEquals("/some%2Fpath", u.getRawPath()); + assertEquals("/some/path", u.getPath()); + assertEquals("host.xy", u.getHost()); + assertEquals(80, u.getPort()); + assertEquals("user", u.getUser()); + assertEquals("secret", u.getPass()); + assertEquals(u, new URIish(str)); + } + @Test public void testFileProtocol() throws IllegalArgumentException, URISyntaxException, IOException { @@ -565,6 +769,7 @@ public class URIishTest { assertFalse(u.isRemote()); assertNull(u.getHost()); assertNull(u.getPass()); + assertEquals("/a/b.txt", u.getRawPath()); assertEquals("/a/b.txt", u.getPath()); assertEquals(-1, u.getPort()); assertNull(u.getUser()); @@ -586,6 +791,7 @@ public class URIishTest { assertFalse(u.isRemote()); assertNull(u.getHost()); assertNull(u.getPass()); + assertEquals("/a/b.txt", u.getRawPath()); assertEquals("/a/b.txt", u.getPath()); assertEquals(-1, u.getPort()); assertNull(u.getUser()); |