You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

URIishTest.java 36KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061
  1. /*
  2. * Copyright (C) 2009, Mykola Nikishov <mn@mn.com.ua>
  3. * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
  4. * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
  5. * Copyright (C) 2013, Robin Stocker <robin@nibor.org>
  6. * Copyright (C) 2015, Patrick Steinhardt <ps@pks.im> and others
  7. *
  8. * This program and the accompanying materials are made available under the
  9. * terms of the Eclipse Distribution License v. 1.0 which is available at
  10. * https://www.eclipse.org/org/documents/edl-v10.php.
  11. *
  12. * SPDX-License-Identifier: BSD-3-Clause
  13. */
  14. package org.eclipse.jgit.transport;
  15. import static org.junit.Assert.assertEquals;
  16. import static org.junit.Assert.assertFalse;
  17. import static org.junit.Assert.assertNull;
  18. import static org.junit.Assert.assertTrue;
  19. import java.io.File;
  20. import java.io.IOException;
  21. import java.net.URISyntaxException;
  22. import org.junit.Ignore;
  23. import org.junit.Test;
  24. public class URIishTest {
  25. private static final String GIT_SCHEME = "git://";
  26. @SuppressWarnings("unused")
  27. @Test(expected = URISyntaxException.class)
  28. public void shouldRaiseErrorOnEmptyURI() throws Exception {
  29. new URIish("");
  30. }
  31. @SuppressWarnings("unused")
  32. @Test(expected = URISyntaxException.class)
  33. public void shouldRaiseErrorOnNullURI() throws Exception {
  34. new URIish((String) null);
  35. }
  36. @Test
  37. public void testUnixFile() throws Exception {
  38. final String str = "/home/m y";
  39. URIish u = new URIish(str);
  40. assertNull(u.getScheme());
  41. assertFalse(u.isRemote());
  42. assertEquals(str, u.getRawPath());
  43. assertEquals(str, u.getPath());
  44. assertEquals(str, u.toString());
  45. assertEquals(str, u.toASCIIString());
  46. assertEquals(u, new URIish(str));
  47. }
  48. @Test
  49. public void testWindowsFile() throws Exception {
  50. final String str = "D:/m y";
  51. URIish u = new URIish(str);
  52. assertNull(u.getScheme());
  53. assertFalse(u.isRemote());
  54. assertEquals(str, u.getRawPath());
  55. assertEquals(str, u.getPath());
  56. assertEquals(str, u.toString());
  57. assertEquals(str, u.toASCIIString());
  58. assertEquals(u, new URIish(str));
  59. }
  60. @Test
  61. public void testWindowsFile2() throws Exception {
  62. final String str = "D:\\m y";
  63. URIish u = new URIish(str);
  64. assertNull(u.getScheme());
  65. assertFalse(u.isRemote());
  66. assertEquals("D:\\m y", u.getRawPath());
  67. assertEquals("D:\\m y", u.getPath());
  68. assertEquals("D:\\m y", u.toString());
  69. assertEquals("D:\\m y", u.toASCIIString());
  70. assertEquals(u, new URIish(str));
  71. }
  72. @Test
  73. public void testRelativePath() throws Exception {
  74. final String str = "../../foo/bar";
  75. URIish u = new URIish(str);
  76. assertNull(u.getScheme());
  77. assertFalse(u.isRemote());
  78. assertEquals(str, u.getRawPath());
  79. assertEquals(str, u.getPath());
  80. assertEquals(str, u.toString());
  81. assertEquals(str, u.toASCIIString());
  82. assertEquals(u, new URIish(str));
  83. }
  84. @Test
  85. public void testUNC() throws Exception {
  86. final String str = "\\\\some\\place";
  87. URIish u = new URIish(str);
  88. assertNull(u.getScheme());
  89. assertFalse(u.isRemote());
  90. assertEquals("\\\\some\\place", u.getRawPath());
  91. assertEquals("\\\\some\\place", u.getPath());
  92. assertEquals("\\\\some\\place", u.toString());
  93. assertEquals("\\\\some\\place", u.toASCIIString());
  94. assertEquals(u, new URIish(str));
  95. }
  96. @Test
  97. public void testFileProtoUnix() throws Exception {
  98. final String str = "file:///home/m y";
  99. URIish u = new URIish(str);
  100. assertEquals("file", u.getScheme());
  101. assertFalse(u.isRemote());
  102. assertEquals("/home/m y", u.getRawPath());
  103. assertEquals("/home/m y", u.getPath());
  104. assertEquals("file:///home/m y", u.toString());
  105. assertEquals("file:///home/m%20y", u.toASCIIString());
  106. assertEquals(u, new URIish(str));
  107. }
  108. @Test
  109. public void testURIEncode_00() throws Exception {
  110. final String str = "file:///home/m%00y";
  111. URIish u = new URIish(str);
  112. assertEquals("file", u.getScheme());
  113. assertFalse(u.isRemote());
  114. assertEquals("/home/m%00y", u.getRawPath());
  115. assertEquals("/home/m\u0000y", u.getPath());
  116. assertEquals("file:///home/m%00y", u.toString());
  117. assertEquals("file:///home/m%00y", u.toASCIIString());
  118. assertEquals(u, new URIish(str));
  119. }
  120. @Test
  121. public void testURIEncode_0a() throws Exception {
  122. final String str = "file:///home/m%0ay";
  123. URIish u = new URIish(str);
  124. assertEquals("file", u.getScheme());
  125. assertFalse(u.isRemote());
  126. assertEquals("/home/m%0ay", u.getRawPath());
  127. assertEquals("/home/m\ny", u.getPath());
  128. assertEquals("file:///home/m%0ay", u.toString());
  129. assertEquals("file:///home/m%0ay", u.toASCIIString());
  130. assertEquals(u, new URIish(str));
  131. }
  132. @Test
  133. public void testURIEncode_unicode() throws Exception {
  134. final String str = "file:///home/m%c3%a5y";
  135. URIish u = new URIish(str);
  136. assertEquals("file", u.getScheme());
  137. assertFalse(u.isRemote());
  138. assertEquals("/home/m%c3%a5y", u.getRawPath());
  139. assertEquals("/home/m\u00e5y", u.getPath());
  140. assertEquals("file:///home/m%c3%a5y", u.toString());
  141. assertEquals("file:///home/m%c3%a5y", u.toASCIIString());
  142. assertEquals(u, new URIish(str));
  143. }
  144. @Test
  145. public void testFileProtoWindows() throws Exception {
  146. final String str = "file:///D:/m y";
  147. URIish u = new URIish(str);
  148. assertEquals("file", u.getScheme());
  149. assertFalse(u.isRemote());
  150. assertEquals(null, u.getHost());
  151. assertEquals(-1, u.getPort());
  152. assertEquals(null, u.getUser());
  153. assertEquals(null, u.getPass());
  154. assertEquals("D:/m y", u.getRawPath());
  155. assertEquals("D:/m y", u.getPath());
  156. assertEquals("file:///D:/m y", u.toString());
  157. assertEquals("file:///D:/m%20y", u.toASCIIString());
  158. assertEquals(u, new URIish(str));
  159. }
  160. @Test
  161. public void testFileProtoWindowsWithHost() throws Exception {
  162. final String str = "file://localhost/D:/m y";
  163. URIish u = new URIish(str);
  164. assertEquals("file", u.getScheme());
  165. assertTrue(u.isRemote());
  166. assertEquals("localhost", u.getHost());
  167. assertEquals(-1, u.getPort());
  168. assertEquals(null, u.getUser());
  169. assertEquals(null, u.getPass());
  170. assertEquals("D:/m y", u.getRawPath());
  171. assertEquals("D:/m y", u.getPath());
  172. assertEquals("file://localhost/D:/m y", u.toString());
  173. assertEquals("file://localhost/D:/m%20y", u.toASCIIString());
  174. assertEquals(u, new URIish(str));
  175. }
  176. @Test
  177. public void testFileProtoWindowsWithHostAndPort() throws Exception {
  178. final String str = "file://localhost:80/D:/m y";
  179. URIish u = new URIish(str);
  180. assertEquals("file", u.getScheme());
  181. assertTrue(u.isRemote());
  182. assertEquals("localhost", u.getHost());
  183. assertEquals(80, u.getPort());
  184. assertEquals(null, u.getUser());
  185. assertEquals(null, u.getPass());
  186. assertEquals("D:/m y", u.getRawPath());
  187. assertEquals("D:/m y", u.getPath());
  188. assertEquals("file://localhost:80/D:/m y", u.toString());
  189. assertEquals("file://localhost:80/D:/m%20y", u.toASCIIString());
  190. assertEquals(u, new URIish(str));
  191. }
  192. @Test
  193. public void testFileProtoWindowsWithHostAndEmptyPortIsAmbiguous()
  194. throws Exception {
  195. final String str = "file://localhost:/D:/m y";
  196. URIish u = new URIish(str);
  197. assertEquals("file", u.getScheme());
  198. assertFalse(u.isRemote());
  199. assertEquals(null, u.getHost());
  200. assertEquals(-1, u.getPort());
  201. assertEquals(null, u.getUser());
  202. assertEquals(null, u.getPass());
  203. assertEquals("localhost:/D:/m y", u.getRawPath());
  204. assertEquals("localhost:/D:/m y", u.getPath());
  205. assertEquals("file:///localhost:/D:/m y", u.toString());
  206. assertEquals("file:///localhost:/D:/m%20y", u.toASCIIString());
  207. assertEquals(u, new URIish(str));
  208. }
  209. @Test
  210. public void testFileProtoWindowsMissingHostSlash() throws Exception {
  211. final String str = "file://D:/m y";
  212. URIish u = new URIish(str);
  213. assertEquals("file", u.getScheme());
  214. assertFalse(u.isRemote());
  215. assertEquals("D:/m y", u.getRawPath());
  216. assertEquals("D:/m y", u.getPath());
  217. assertEquals("file:///D:/m y", u.toString());
  218. assertEquals("file:///D:/m%20y", u.toASCIIString());
  219. assertEquals(u, new URIish(str));
  220. }
  221. @Test
  222. public void testFileProtoWindowsMissingHostSlash2() throws Exception {
  223. final String str = "file://D: /m y";
  224. URIish u = new URIish(str);
  225. assertEquals("file", u.getScheme());
  226. assertFalse(u.isRemote());
  227. assertEquals("D: /m y", u.getRawPath());
  228. assertEquals("D: /m y", u.getPath());
  229. assertEquals("file:///D: /m y", u.toString());
  230. assertEquals("file:///D:%20/m%20y", u.toASCIIString());
  231. assertEquals(u, new URIish(str));
  232. }
  233. @Test
  234. public void testGitProtoUnix() throws Exception {
  235. final String str = "git://example.com/home/m y";
  236. URIish u = new URIish(str);
  237. assertEquals("git", u.getScheme());
  238. assertTrue(u.isRemote());
  239. assertEquals("example.com", u.getHost());
  240. assertEquals("/home/m y", u.getRawPath());
  241. assertEquals("/home/m y", u.getPath());
  242. assertEquals("git://example.com/home/m y", u.toString());
  243. assertEquals("git://example.com/home/m%20y", u.toASCIIString());
  244. assertEquals(u, new URIish(str));
  245. }
  246. @Test
  247. public void testGitProtoUnixPort() throws Exception {
  248. final String str = "git://example.com:333/home/m y";
  249. URIish u = new URIish(str);
  250. assertEquals("git", u.getScheme());
  251. assertTrue(u.isRemote());
  252. assertEquals("example.com", u.getHost());
  253. assertEquals("/home/m y", u.getRawPath());
  254. assertEquals("/home/m y", u.getPath());
  255. assertEquals(333, u.getPort());
  256. assertEquals("git://example.com:333/home/m y", u.toString());
  257. assertEquals("git://example.com:333/home/m%20y", u.toASCIIString());
  258. assertEquals(u, new URIish(str));
  259. }
  260. @Test
  261. public void testGitProtoWindowsPort() throws Exception {
  262. final String str = "git://example.com:338/D:/m y";
  263. URIish u = new URIish(str);
  264. assertEquals("git", u.getScheme());
  265. assertTrue(u.isRemote());
  266. assertEquals("D:/m y", u.getRawPath());
  267. assertEquals("D:/m y", u.getPath());
  268. assertEquals(338, u.getPort());
  269. assertEquals("example.com", u.getHost());
  270. assertEquals("git://example.com:338/D:/m y", u.toString());
  271. assertEquals("git://example.com:338/D:/m%20y", u.toASCIIString());
  272. assertEquals(u, new URIish(str));
  273. }
  274. @Test
  275. public void testGitProtoWindows() throws Exception {
  276. final String str = "git://example.com/D:/m y";
  277. URIish u = new URIish(str);
  278. assertEquals("git", u.getScheme());
  279. assertTrue(u.isRemote());
  280. assertEquals("D:/m y", u.getRawPath());
  281. assertEquals("D:/m y", u.getPath());
  282. assertEquals("example.com", u.getHost());
  283. assertEquals(-1, u.getPort());
  284. assertEquals("git://example.com/D:/m y", u.toString());
  285. assertEquals("git://example.com/D:/m%20y", u.toASCIIString());
  286. assertEquals(u, new URIish(str));
  287. }
  288. @Test
  289. public void testScpStyleNoURIDecoding() throws Exception {
  290. final String str = "example.com:some/p%20ath";
  291. URIish u = new URIish(str);
  292. assertNull(u.getScheme());
  293. assertTrue(u.isRemote());
  294. assertEquals("some/p%20ath", u.getRawPath());
  295. assertEquals("some/p%20ath", u.getPath());
  296. assertEquals("example.com", u.getHost());
  297. assertEquals(-1, u.getPort());
  298. assertEquals(str, u.toString());
  299. assertEquals(str, u.toASCIIString());
  300. assertEquals(u, new URIish(str));
  301. }
  302. @Test
  303. public void testScpStyleWithoutUserRelativePath() throws Exception {
  304. final String str = "example.com:some/p ath";
  305. URIish u = new URIish(str);
  306. assertNull(u.getScheme());
  307. assertTrue(u.isRemote());
  308. assertEquals("some/p ath", u.getRawPath());
  309. assertEquals("some/p ath", u.getPath());
  310. assertEquals("example.com", u.getHost());
  311. assertEquals(-1, u.getPort());
  312. assertEquals(str, u.toString());
  313. assertEquals(str, u.toASCIIString());
  314. assertEquals(u, new URIish(str));
  315. }
  316. @Test
  317. public void testScpStyleWithoutUserAbsolutePath() throws Exception {
  318. final String str = "example.com:/some/p ath";
  319. URIish u = new URIish(str);
  320. assertNull(u.getScheme());
  321. assertTrue(u.isRemote());
  322. assertEquals("/some/p ath", u.getRawPath());
  323. assertEquals("/some/p ath", u.getPath());
  324. assertEquals("example.com", u.getHost());
  325. assertEquals(-1, u.getPort());
  326. assertEquals(str, u.toString());
  327. assertEquals(str, u.toASCIIString());
  328. assertEquals(u, new URIish(str));
  329. }
  330. @Test
  331. public void testScpStyleWithUser() throws Exception {
  332. final String str = "user@example.com:some/p ath";
  333. URIish u = new URIish(str);
  334. assertNull(u.getScheme());
  335. assertTrue(u.isRemote());
  336. assertEquals("some/p ath", u.getRawPath());
  337. assertEquals("some/p ath", u.getPath());
  338. assertEquals("user", u.getUser());
  339. assertEquals("example.com", u.getHost());
  340. assertEquals(-1, u.getPort());
  341. assertEquals(str, u.toString());
  342. assertEquals(str, u.toASCIIString());
  343. assertEquals(u, new URIish(str));
  344. }
  345. @Test
  346. public void testGitSshProto() throws Exception {
  347. final String str = "git+ssh://example.com/some/p ath";
  348. URIish u = new URIish(str);
  349. assertEquals("git+ssh", u.getScheme());
  350. assertTrue(u.isRemote());
  351. assertEquals("/some/p ath", u.getRawPath());
  352. assertEquals("/some/p ath", u.getPath());
  353. assertEquals("example.com", u.getHost());
  354. assertEquals(-1, u.getPort());
  355. assertEquals("git+ssh://example.com/some/p ath", u.toString());
  356. assertEquals("git+ssh://example.com/some/p%20ath", u.toASCIIString());
  357. assertEquals(u, new URIish(str));
  358. }
  359. @Test
  360. public void testSshGitProto() throws Exception {
  361. final String str = "ssh+git://example.com/some/p ath";
  362. URIish u = new URIish(str);
  363. assertEquals("ssh+git", u.getScheme());
  364. assertTrue(u.isRemote());
  365. assertEquals("/some/p ath", u.getRawPath());
  366. assertEquals("/some/p ath", u.getPath());
  367. assertEquals("example.com", u.getHost());
  368. assertEquals(-1, u.getPort());
  369. assertEquals("ssh+git://example.com/some/p ath", u.toString());
  370. assertEquals("ssh+git://example.com/some/p%20ath", u.toASCIIString());
  371. assertEquals(u, new URIish(str));
  372. }
  373. @Test
  374. public void testSshProto() throws Exception {
  375. final String str = "ssh://example.com/some/p ath";
  376. URIish u = new URIish(str);
  377. assertEquals("ssh", u.getScheme());
  378. assertTrue(u.isRemote());
  379. assertEquals("/some/p ath", u.getRawPath());
  380. assertEquals("/some/p ath", u.getPath());
  381. assertEquals("example.com", u.getHost());
  382. assertEquals(-1, u.getPort());
  383. assertEquals("ssh://example.com/some/p ath", u.toString());
  384. assertEquals("ssh://example.com/some/p%20ath", u.toASCIIString());
  385. assertEquals(u, new URIish(str));
  386. }
  387. @Test
  388. public void testSshProtoHostOnly() throws Exception {
  389. final String str = "ssh://example.com/";
  390. URIish u = new URIish(str);
  391. assertEquals("ssh", u.getScheme());
  392. assertTrue(u.isRemote());
  393. assertEquals("/", u.getRawPath());
  394. assertEquals("/", u.getPath());
  395. assertEquals("example.com", u.getHost());
  396. assertEquals(-1, u.getPort());
  397. assertEquals("ssh://example.com/", u.toString());
  398. assertEquals("ssh://example.com/", u.toASCIIString());
  399. assertEquals("example.com", u.getHumanishName());
  400. assertEquals(u, new URIish(str));
  401. }
  402. @Test
  403. public void testSshProtoHostWithAuthentication() throws Exception {
  404. final String str = "ssh://user:secret@pass@example.com/";
  405. URIish u = new URIish(str);
  406. assertEquals("ssh", u.getScheme());
  407. assertTrue(u.isRemote());
  408. assertEquals("/", u.getRawPath());
  409. assertEquals("/", u.getPath());
  410. assertEquals("example.com", u.getHost());
  411. assertEquals(-1, u.getPort());
  412. assertEquals("ssh://user@example.com/", u.toString());
  413. assertEquals("ssh://user@example.com/", u.toASCIIString());
  414. assertEquals("example.com", u.getHumanishName());
  415. assertEquals("user", u.getUser());
  416. assertEquals("secret@pass", u.getPass());
  417. assertEquals(u, new URIish(str));
  418. }
  419. @Test
  420. public void testSshProtoHostWithPort() throws Exception {
  421. final String str = "ssh://example.com:2222/";
  422. URIish u = new URIish(str);
  423. assertEquals("ssh", u.getScheme());
  424. assertTrue(u.isRemote());
  425. assertEquals("/", u.getRawPath());
  426. assertEquals("/", u.getPath());
  427. assertEquals("example.com", u.getHost());
  428. assertEquals(2222, u.getPort());
  429. assertEquals("ssh://example.com:2222/", u.toString());
  430. assertEquals("ssh://example.com:2222/", u.toASCIIString());
  431. assertEquals("example.com", u.getHumanishName());
  432. assertEquals(u, new URIish(str));
  433. }
  434. @Test
  435. public void testSshProtoHostWithEmptyPortAndPath() throws Exception {
  436. final String str = "ssh://example.com:/path";
  437. URIish u = new URIish(str);
  438. assertEquals("ssh", u.getScheme());
  439. assertTrue(u.isRemote());
  440. assertEquals("/path", u.getRawPath());
  441. assertEquals("/path", u.getPath());
  442. assertEquals("example.com", u.getHost());
  443. assertEquals(-1, u.getPort());
  444. assertEquals("ssh://example.com/path", u.toString());
  445. assertEquals("ssh://example.com/path", u.toASCIIString());
  446. assertEquals(u, new URIish(str));
  447. assertEquals(u, new URIish("ssh://example.com/path"));
  448. }
  449. @Test
  450. public void testSshProtoWithUserAndPort() throws Exception {
  451. final String str = "ssh://user@example.com:33/some/p ath";
  452. URIish u = new URIish(str);
  453. assertEquals("ssh", u.getScheme());
  454. assertTrue(u.isRemote());
  455. assertEquals("/some/p ath", u.getRawPath());
  456. assertEquals("/some/p ath", u.getPath());
  457. assertEquals("example.com", u.getHost());
  458. assertEquals("user", u.getUser());
  459. assertNull(u.getPass());
  460. assertEquals(33, u.getPort());
  461. assertEquals("ssh://user@example.com:33/some/p ath", u.toString());
  462. assertEquals("ssh://user@example.com:33/some/p%20ath",
  463. u.toASCIIString());
  464. assertEquals(u, new URIish(str));
  465. }
  466. @Test
  467. public void testSshProtoWithUserPassAndPort() throws Exception {
  468. final String str = "ssh://user:pass@example.com:33/some/p ath";
  469. URIish u = new URIish(str);
  470. assertEquals("ssh", u.getScheme());
  471. assertTrue(u.isRemote());
  472. assertEquals("/some/p ath", u.getRawPath());
  473. assertEquals("/some/p ath", u.getPath());
  474. assertEquals("example.com", u.getHost());
  475. assertEquals("user", u.getUser());
  476. assertEquals("pass", u.getPass());
  477. assertEquals(33, u.getPort());
  478. assertEquals("ssh://user:pass@example.com:33/some/p ath",
  479. u.toPrivateString());
  480. assertEquals("ssh://user:pass@example.com:33/some/p%20ath",
  481. u.toPrivateASCIIString());
  482. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  483. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  484. assertEquals(u, new URIish(str));
  485. }
  486. @Test
  487. public void testSshProtoWithEmailUserAndPort() throws Exception {
  488. final String str = "ssh://user.name@email.com@example.com:33/some/p ath";
  489. URIish u = new URIish(str);
  490. assertEquals("ssh", u.getScheme());
  491. assertTrue(u.isRemote());
  492. assertEquals("/some/p ath", u.getRawPath());
  493. assertEquals("/some/p ath", u.getPath());
  494. assertEquals("example.com", u.getHost());
  495. assertEquals("user.name@email.com", u.getUser());
  496. assertNull(u.getPass());
  497. assertEquals(33, u.getPort());
  498. assertEquals("ssh://user.name%40email.com@example.com:33/some/p ath",
  499. u.toPrivateString());
  500. assertEquals("ssh://user.name%40email.com@example.com:33/some/p%20ath",
  501. u.toPrivateASCIIString());
  502. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  503. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  504. assertEquals(u, new URIish(str));
  505. }
  506. @Test
  507. public void testSshProtoWithEmailUserPassAndPort() throws Exception {
  508. final String str = "ssh://user.name@email.com:pass@wor:d@example.com:33/some/p ath";
  509. URIish u = new URIish(str);
  510. assertEquals("ssh", u.getScheme());
  511. assertTrue(u.isRemote());
  512. assertEquals("/some/p ath", u.getRawPath());
  513. assertEquals("/some/p ath", u.getPath());
  514. assertEquals("example.com", u.getHost());
  515. assertEquals("user.name@email.com", u.getUser());
  516. assertEquals("pass@wor:d", u.getPass());
  517. assertEquals(33, u.getPort());
  518. assertEquals("ssh://user.name%40email.com:pass%40wor%3ad@example.com:33/some/p ath",
  519. u.toPrivateString());
  520. assertEquals("ssh://user.name%40email.com:pass%40wor%3ad@example.com:33/some/p%20ath",
  521. u.toPrivateASCIIString());
  522. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  523. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  524. assertEquals(u, new URIish(str));
  525. }
  526. @Test
  527. public void testSshProtoWithADUserPassAndPort() throws Exception {
  528. final String str = "ssh://DOMAIN\\user:pass@example.com:33/some/p ath";
  529. URIish u = new URIish(str);
  530. assertEquals("ssh", u.getScheme());
  531. assertTrue(u.isRemote());
  532. assertEquals("/some/p ath", u.getRawPath());
  533. assertEquals("/some/p ath", u.getPath());
  534. assertEquals("example.com", u.getHost());
  535. assertEquals("DOMAIN\\user", u.getUser());
  536. assertEquals("pass", u.getPass());
  537. assertEquals(33, u.getPort());
  538. assertEquals("ssh://DOMAIN\\user:pass@example.com:33/some/p ath",
  539. u.toPrivateString());
  540. assertEquals("ssh://DOMAIN\\user:pass@example.com:33/some/p%20ath",
  541. u.toPrivateASCIIString());
  542. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  543. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  544. assertEquals(u, new URIish(str));
  545. }
  546. @Test
  547. public void testSshProtoWithEscapedADUserPassAndPort() throws Exception {
  548. final String str = "ssh://DOMAIN%5c\u00fcser:pass@example.com:33/some/p ath";
  549. URIish u = new URIish(str);
  550. assertEquals("ssh", u.getScheme());
  551. assertTrue(u.isRemote());
  552. assertEquals("/some/p ath", u.getRawPath());
  553. assertEquals("/some/p ath", u.getPath());
  554. assertEquals("example.com", u.getHost());
  555. assertEquals("DOMAIN\\\u00fcser", u.getUser());
  556. assertEquals("pass", u.getPass());
  557. assertEquals(33, u.getPort());
  558. assertEquals("ssh://DOMAIN\\\u00fcser:pass@example.com:33/some/p ath",
  559. u.toPrivateString());
  560. assertEquals(
  561. "ssh://DOMAIN\\%c3%bcser:pass@example.com:33/some/p%20ath",
  562. u.toPrivateASCIIString());
  563. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  564. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  565. assertEquals(u, new URIish(str));
  566. }
  567. @Test
  568. public void testURIEncodeDecode() throws Exception {
  569. final String str = "ssh://%3ax%25:%40%41x@example.com:33/some%c3%a5/p%20a th";
  570. URIish u = new URIish(str);
  571. assertEquals("ssh", u.getScheme());
  572. assertTrue(u.isRemote());
  573. assertEquals("/some%c3%a5/p%20a th", u.getRawPath());
  574. assertEquals("/some\u00e5/p a th", u.getPath());
  575. assertEquals("example.com", u.getHost());
  576. assertEquals(":x%", u.getUser());
  577. assertEquals("@Ax", u.getPass());
  578. assertEquals(33, u.getPort());
  579. assertEquals("ssh://%3ax%25:%40Ax@example.com:33/some%c3%a5/p%20a th",
  580. u.toPrivateString());
  581. assertEquals(
  582. "ssh://%3ax%25:%40Ax@example.com:33/some%c3%a5/p%20a%20th",
  583. u.toPrivateASCIIString());
  584. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  585. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  586. assertEquals(u, new URIish(str));
  587. }
  588. @Test
  589. public void testGitWithUserHome() throws Exception {
  590. final String str = "git://example.com/~some/p ath";
  591. URIish u = new URIish(str);
  592. assertEquals("git", u.getScheme());
  593. assertTrue(u.isRemote());
  594. assertEquals("~some/p ath", u.getRawPath());
  595. assertEquals("~some/p ath", u.getPath());
  596. assertEquals("example.com", u.getHost());
  597. assertNull(u.getUser());
  598. assertNull(u.getPass());
  599. assertEquals(-1, u.getPort());
  600. assertEquals("git://example.com/~some/p ath", u.toPrivateString());
  601. assertEquals("git://example.com/~some/p%20ath",
  602. u.toPrivateASCIIString());
  603. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  604. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  605. assertEquals(u, new URIish(str));
  606. }
  607. @Test
  608. @Ignore("Resolving ~user is beyond standard Java API and need more support")
  609. public void testFileWithUserHome() throws Exception {
  610. final String str = "~some/p ath";
  611. URIish u = new URIish(str);
  612. assertEquals("git", u.getScheme());
  613. assertTrue(u.isRemote());
  614. assertEquals("~some/p ath", u.getRawPath());
  615. assertEquals("~some/p ath", u.getPath());
  616. assertEquals("example.com", u.getHost());
  617. assertNull(u.getUser());
  618. assertNull(u.getPass());
  619. assertEquals(-1, u.getPort());
  620. assertEquals(str, u.toPrivateString());
  621. assertEquals(str, u.toPrivateASCIIString());
  622. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  623. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  624. assertEquals(u, new URIish(str));
  625. }
  626. @Test
  627. public void testFileWithNoneUserHomeWithTilde() throws Exception {
  628. final String str = "/~some/p ath";
  629. URIish u = new URIish(str);
  630. assertNull(u.getScheme());
  631. assertFalse(u.isRemote());
  632. assertEquals("/~some/p ath", u.getRawPath());
  633. assertEquals("/~some/p ath", u.getPath());
  634. assertNull(u.getHost());
  635. assertNull(u.getUser());
  636. assertNull(u.getPass());
  637. assertEquals(-1, u.getPort());
  638. assertEquals(str, u.toPrivateString());
  639. assertEquals(str, u.toPrivateASCIIString());
  640. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  641. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  642. assertEquals(u, new URIish(str));
  643. }
  644. @Test(expected = IllegalArgumentException.class)
  645. public void testGetNullHumanishName() {
  646. new URIish().getHumanishName();
  647. }
  648. @Test(expected = IllegalArgumentException.class)
  649. public void testGetEmptyHumanishName() throws URISyntaxException {
  650. new URIish(GIT_SCHEME).getHumanishName();
  651. }
  652. @Test(expected = IllegalArgumentException.class)
  653. public void testGetAbsEmptyHumanishName() {
  654. new URIish().getHumanishName();
  655. }
  656. @Test
  657. public void testGetSet() throws Exception {
  658. final String str = "ssh://DOMAIN\\user:pass@example.com:33/some/p ath%20";
  659. URIish u = new URIish(str);
  660. u = u.setHost(u.getHost());
  661. u = u.setPass(u.getPass());
  662. u = u.setPort(u.getPort());
  663. assertEquals("ssh", u.getScheme());
  664. assertTrue(u.isRemote());
  665. u = u.setRawPath(u.getRawPath());
  666. assertEquals("/some/p ath%20", u.getRawPath());
  667. u = u.setPath(u.getPath());
  668. assertEquals("/some/p ath ", u.getRawPath());
  669. assertEquals("/some/p ath ", u.getPath());
  670. assertEquals("example.com", u.getHost());
  671. assertEquals("DOMAIN\\user", u.getUser());
  672. assertEquals("pass", u.getPass());
  673. assertEquals(33, u.getPort());
  674. assertEquals("ssh://DOMAIN\\user:pass@example.com:33/some/p ath ",
  675. u.toPrivateString());
  676. assertEquals("ssh://DOMAIN\\user:pass@example.com:33/some/p%20ath%20",
  677. u.toPrivateASCIIString());
  678. assertEquals(u.setPass(null).toPrivateString(), u.toString());
  679. assertEquals(u.setPass(null).toPrivateASCIIString(), u.toASCIIString());
  680. assertEquals(u, new URIish(str));
  681. }
  682. @Test
  683. public void testGetValidWithEmptySlashDotGitHumanishName()
  684. throws IllegalArgumentException, URISyntaxException {
  685. String humanishName = new URIish("/a/b/.git").getHumanishName();
  686. assertEquals("b", humanishName);
  687. }
  688. @Test
  689. public void testGetWithSlashDotGitHumanishName() throws URISyntaxException {
  690. assertEquals("", new URIish("/.git").getHumanishName());
  691. }
  692. @Test
  693. public void testGetTwoSlashesDotGitHumanishName() throws URISyntaxException {
  694. assertEquals("", new URIish("//.git").getHumanishName());
  695. }
  696. @Test
  697. public void testGetValidHumanishName() throws IllegalArgumentException,
  698. URISyntaxException {
  699. String humanishName = new URIish(GIT_SCHEME + "abc").getHumanishName();
  700. assertEquals("abc", humanishName);
  701. }
  702. @Test
  703. public void testGetEmptyHumanishNameWithAuthorityOnly() throws IllegalArgumentException,
  704. URISyntaxException {
  705. String humanishName = new URIish(GIT_SCHEME + "abc").getHumanishName();
  706. assertEquals("abc", humanishName);
  707. }
  708. @Test
  709. public void testGetValidSlashHumanishName()
  710. throws IllegalArgumentException, URISyntaxException {
  711. String humanishName = new URIish(GIT_SCHEME + "host/abc/")
  712. .getHumanishName();
  713. assertEquals("abc", humanishName);
  714. }
  715. @Test
  716. public void testGetSlashValidSlashHumanishName()
  717. throws IllegalArgumentException, URISyntaxException {
  718. String humanishName = new URIish("/abc/").getHumanishName();
  719. assertEquals("abc", humanishName);
  720. }
  721. @Test
  722. public void testGetSlashValidSlashDotGitSlashHumanishName()
  723. throws IllegalArgumentException, URISyntaxException {
  724. String humanishName = new URIish("/abc/.git").getHumanishName();
  725. assertEquals("abc", humanishName);
  726. }
  727. @Test
  728. public void testGetSlashSlashDotGitSlashHumanishName()
  729. throws IllegalArgumentException, URISyntaxException {
  730. final String humanishName = new URIish(GIT_SCHEME + "/.git")
  731. .getHumanishName();
  732. assertEquals("may return an empty humanish name", "", humanishName);
  733. }
  734. @Test
  735. public void testGetSlashesValidSlashHumanishName()
  736. throws IllegalArgumentException, URISyntaxException {
  737. String humanishName = new URIish("/a/b/c/").getHumanishName();
  738. assertEquals("c", humanishName);
  739. }
  740. @Test
  741. public void testGetValidDotGitHumanishName()
  742. throws IllegalArgumentException, URISyntaxException {
  743. String humanishName = new URIish(GIT_SCHEME + "abc.git")
  744. .getHumanishName();
  745. assertEquals("abc", humanishName);
  746. }
  747. @Test
  748. public void testGetValidDotGitSlashHumanishName()
  749. throws IllegalArgumentException, URISyntaxException {
  750. String humanishName = new URIish(GIT_SCHEME + "host.xy/abc.git/")
  751. .getHumanishName();
  752. assertEquals("abc", humanishName);
  753. }
  754. @Test
  755. public void testGetValidWithSlashDotGitHumanishName()
  756. throws IllegalArgumentException, URISyntaxException {
  757. String humanishName = new URIish("/abc.git").getHumanishName();
  758. assertEquals("abc", humanishName);
  759. }
  760. @Test
  761. public void testGetValidWithSlashDotGitSlashHumanishName()
  762. throws IllegalArgumentException, URISyntaxException {
  763. String humanishName = new URIish("/abc.git/").getHumanishName();
  764. assertEquals("abc", humanishName);
  765. }
  766. @Test
  767. public void testGetValidWithSlashesDotGitHumanishName()
  768. throws IllegalArgumentException, URISyntaxException {
  769. String humanishName = new URIish("/a/b/c.git").getHumanishName();
  770. assertEquals("c", humanishName);
  771. }
  772. @Test
  773. public void testGetValidWithSlashesDotGitSlashHumanishName()
  774. throws IllegalArgumentException, URISyntaxException {
  775. String humanishName = new URIish("/a/b/c.git/").getHumanishName();
  776. assertEquals("c", humanishName);
  777. }
  778. @Test
  779. public void testGetValidLocalWithTwoSlashesHumanishName()
  780. throws IllegalArgumentException, URISyntaxException {
  781. String humanishName = new URIish("/a/b/c//").getHumanishName();
  782. assertEquals("c", humanishName);
  783. }
  784. @Test
  785. public void testGetValidGitSchemeWithTwoSlashesHumanishName()
  786. throws IllegalArgumentException, URISyntaxException {
  787. String humanishName = new URIish(GIT_SCHEME + "/a/b/c//")
  788. .getHumanishName();
  789. assertEquals("c", humanishName);
  790. }
  791. @Test
  792. public void testGetWindowsPathHumanishName()
  793. throws IllegalArgumentException,
  794. URISyntaxException {
  795. if (File.separatorChar == '\\') {
  796. String humanishName = new URIish("file:///C\\a\\b\\c.git/")
  797. .getHumanishName();
  798. assertEquals("c", humanishName);
  799. }
  800. }
  801. @Test
  802. public void testUserPasswordAndPort() throws URISyntaxException {
  803. String str = "http://user:secret@host.xy:80/some/path";
  804. URIish u = new URIish(str);
  805. assertEquals("http", u.getScheme());
  806. assertTrue(u.isRemote());
  807. assertEquals("/some/path", u.getRawPath());
  808. assertEquals("/some/path", u.getPath());
  809. assertEquals("host.xy", u.getHost());
  810. assertEquals(80, u.getPort());
  811. assertEquals("user", u.getUser());
  812. assertEquals("secret", u.getPass());
  813. assertEquals(u, new URIish(str));
  814. str = "http://user:secret@pass@host.xy:80/some/path";
  815. u = new URIish(str);
  816. assertEquals("http", u.getScheme());
  817. assertTrue(u.isRemote());
  818. assertEquals("/some/path", u.getPath());
  819. assertEquals("host.xy", u.getHost());
  820. assertEquals(80, u.getPort());
  821. assertEquals("user", u.getUser());
  822. assertEquals("secret@pass", u.getPass());
  823. assertEquals(u, new URIish(str));
  824. }
  825. /**
  826. * Exemplify what happens with the special case of encoding '/' as %2F. Web
  827. * services in general parse path components before decoding the characters.
  828. *
  829. * @throws URISyntaxException
  830. */
  831. @Test
  832. public void testPathSeparator() throws URISyntaxException {
  833. String str = "http://user:secret@host.xy:80/some%2Fpath";
  834. URIish u = new URIish(str);
  835. assertEquals("http", u.getScheme());
  836. assertTrue(u.isRemote());
  837. assertEquals("/some%2Fpath", u.getRawPath());
  838. assertEquals("/some/path", u.getPath());
  839. assertEquals("host.xy", u.getHost());
  840. assertEquals(80, u.getPort());
  841. assertEquals("user", u.getUser());
  842. assertEquals("secret", u.getPass());
  843. assertEquals(u, new URIish(str));
  844. }
  845. @Test
  846. public void testFileProtocol() throws IllegalArgumentException,
  847. URISyntaxException, IOException {
  848. // as defined by git docu
  849. URIish u = new URIish("file:///a/b.txt");
  850. assertEquals("file", u.getScheme());
  851. assertFalse(u.isRemote());
  852. assertNull(u.getHost());
  853. assertNull(u.getPass());
  854. assertEquals("/a/b.txt", u.getRawPath());
  855. assertEquals("/a/b.txt", u.getPath());
  856. assertEquals(-1, u.getPort());
  857. assertNull(u.getUser());
  858. assertEquals("b.txt", u.getHumanishName());
  859. File tmp = File.createTempFile("jgitUnitTest", ".tmp");
  860. u = new URIish(tmp.toURI().toString());
  861. assertEquals("file", u.getScheme());
  862. assertFalse(u.isRemote());
  863. assertNull(u.getHost());
  864. assertNull(u.getPass());
  865. assertTrue(u.getPath().contains("jgitUnitTest"));
  866. assertEquals(-1, u.getPort());
  867. assertNull(u.getUser());
  868. assertTrue(u.getHumanishName().startsWith("jgitUnitTest"));
  869. u = new URIish("file:/a/b.txt");
  870. assertEquals("file", u.getScheme());
  871. assertFalse(u.isRemote());
  872. assertNull(u.getHost());
  873. assertNull(u.getPass());
  874. assertEquals("/a/b.txt", u.getRawPath());
  875. assertEquals("/a/b.txt", u.getPath());
  876. assertEquals(-1, u.getPort());
  877. assertNull(u.getUser());
  878. assertEquals("b.txt", u.getHumanishName());
  879. u = new URIish("file:/a/test.bundle");
  880. assertEquals("file", u.getScheme());
  881. assertFalse(u.isRemote());
  882. assertNull(u.getHost());
  883. assertNull(u.getPass());
  884. assertEquals("/a/test.bundle", u.getRawPath());
  885. assertEquals("/a/test.bundle", u.getPath());
  886. assertEquals(-1, u.getPort());
  887. assertNull(u.getUser());
  888. assertEquals("test", u.getHumanishName());
  889. }
  890. @Test
  891. public void testALot() throws URISyntaxException {
  892. // user pass host port path
  893. // 1 2 3 4 5
  894. String[][] tests = {
  895. new String[] { "%1$s://%2$s:%3$s@%4$s:%5$s/%6$s", "%1$s",
  896. "%2$s", "%3$s", "%4$s", "%5$s", "%6$s" },
  897. new String[] { "%1$s://%2$s@%4$s:%5$s/%6$s", "%1$s", "%2$s",
  898. null, "%4$s", "%5$s", "%6$s" },
  899. new String[] { "%1$s://%2$s@%4$s/%6$s", "%1$s", "%2$s", null,
  900. "%4$s", null, "%6$s" },
  901. new String[] { "%1$s://%4$s/%6$s", "%1$s", null, null, "%4$s",
  902. null, "%6$s" }, };
  903. String[] schemes = new String[] { "ssh", "ssh+git", "http", "https" };
  904. String[] users = new String[] { "me", "l usr\\example.com",
  905. "lusr\\example" };
  906. String[] passes = new String[] { "wtf", };
  907. String[] hosts = new String[] { "example.com", "1.2.3.4", "[::1]" };
  908. String[] ports = new String[] { "1234", "80" };
  909. String[] paths = new String[] { "/", "/abc", "D:/x", "D:\\x" };
  910. for (String[] test : tests) {
  911. String fmt = test[0];
  912. for (String scheme : schemes) {
  913. for (String user : users) {
  914. for (String pass : passes) {
  915. for (String host : hosts) {
  916. for (String port : ports) {
  917. for (String path : paths) {
  918. String url = String.format(fmt, scheme,
  919. user, pass, host, port, path);
  920. String[] expect = new String[test.length];
  921. for (int i = 1; i < expect.length; ++i)
  922. if (test[i] != null)
  923. expect[i] = String.format(test[i],
  924. scheme, user, pass, host,
  925. port, path);
  926. URIish urIish = new URIish(url);
  927. assertEquals(url, expect[1],
  928. urIish.getScheme());
  929. assertEquals(url, expect[2],
  930. urIish.getUser());
  931. }
  932. }
  933. }
  934. }
  935. }
  936. }
  937. }
  938. }
  939. @Test
  940. public void testStringConstructor() throws Exception {
  941. String str = "http://example.com/";
  942. URIish u = new URIish(str);
  943. assertEquals("example.com", u.getHost());
  944. assertEquals("/", u.getPath());
  945. assertEquals(str, u.toString());
  946. str = "http://example.com";
  947. u = new URIish(str);
  948. assertEquals("example.com", u.getHost());
  949. assertEquals("", u.getPath());
  950. assertEquals(str, u.toString());
  951. }
  952. @Test
  953. public void testEqualsHashcode() throws Exception
  954. {
  955. String[] urls = { "http://user:pass@example.com:8081/path", "../x",
  956. "ssh://x.y:23/z", "ssh://example.com:/path", "D:\\m y",
  957. "\\\\some\\place", "http://localhost:1234",
  958. "user@example.com:some/p ath", "a",
  959. "http://user:pwd@example.com:8081/path",
  960. "http://user:pass@another.com:8081/path",
  961. "http://user:pass@example.com:8083/path" };
  962. URIish w = new URIish("http://user:pass@example.com:8081/path/x");
  963. for (String s : urls) {
  964. URIish u = new URIish(s);
  965. URIish v = new URIish(s);
  966. assertTrue(u.equals(v));
  967. assertTrue(v.equals(u));
  968. assertFalse(u.equals(null));
  969. assertFalse(u.equals(new Object()));
  970. assertFalse(new Object().equals(u));
  971. assertFalse(u.equals(w));
  972. assertFalse(w.equals(u));
  973. assertTrue(u.hashCode() == v.hashCode());
  974. assertFalse(u.hashCode() == new Object().hashCode());
  975. }
  976. }
  977. }