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 37KB

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