{"thread":{"id":"17826","subject":"[JGIT PATCH] 2/2: Tests for externalizable items","startedAt":"2009-02-16T16:46:52Z","lastAt":"2009-02-16T16:46:52Z","messageCount":1,"participants":["Nigel Magnay"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"104973","messageId":"320075ff0902160846o4c9782eax1513943cd1af8c2d@mail.gmail.com","threadId":"17826","inReplyTo":null,"subject":"[JGIT PATCH] 2/2: Tests for externalizable items","fromName":"Nigel Magnay","fromEmail":"nigel.magnay@gmail.com","sentAt":"2009-02-16T16:46:52Z","receivedAt":"2009-02-16T16:46:52Z","isPatch":true,"sender":{"key":"nigel.magnay@gmail.com","avatar":"https://gravatar.com/avatar/d85cf38287bef3a8e4fa02358d2756d7589f8676c5eeb881ce2f6d731e4526c3?d=mp&s=160"},"body":"Extend unit tests for Externalizable items so that each test checks,\nby round-tripping, the\nrepresentation that it remains the same.\n\nSigned-off-by: Nigel Magnay <nigel.magnay@gmail.com>\n---\n .../tst/org/spearce/jgit/lib/T0001_ObjectId.java   |   23 +++++++\n .../spearce/jgit/transport/RefSpecTestCase.java    |   68 ++++++++++++++++----\n .../spearce/jgit/transport/RemoteConfigTest.java   |   57 ++++++++++++++++\n .../tst/org/spearce/jgit/transport/URIishTest.java |   36 ++++++++++\n 4 files changed, 172 insertions(+), 12 deletions(-)\n\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/T0001_ObjectId.java\nb/org.spearce.jgit.test/tst/org/spearce/jgit/lib/T0001_ObjectId.java\nindex 4c03667..be70b65 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/T0001_ObjectId.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/T0001_ObjectId.java\n@@ -37,6 +37,12 @@\n\n package org.spearce.jgit.lib;\n\n+import java.io.ByteArrayInputStream;\n+import java.io.ByteArrayOutputStream;\n+import java.io.IOException;\n+import java.io.ObjectInputStream;\n+import java.io.ObjectOutputStream;\n+\n import junit.framework.TestCase;\n\n public class T0001_ObjectId extends TestCase {\n@@ -94,4 +100,21 @@ public void test010_toString() {\n \t\tfinal String x = \"0000000000000000000000000000000000000000\";\n \t\tassertEquals(x, ObjectId.toString(null));\n \t}\n+\t\n+\tpublic void test011_roundTrip() throws IOException, ClassNotFoundException {\n+\t\tfinal String x = \"0123456789abcdeffedcba987654321011223344\";\n+\t\tfinal ObjectId oid = ObjectId.fromString(x);\n+\t\t\n+\t\tByteArrayOutputStream stream = new ByteArrayOutputStream();\n+\t\tObjectOutputStream out = new ObjectOutputStream(stream);\n+\t\tout.writeObject(oid);\n+\t\tout.close();\n+\n+\t\tObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(\n+\t\t\t\tstream.toByteArray()));\n+\t\tObjectId oid2 = (ObjectId) in.readObject();\n+\t\tin.close();\n+\t\t\n+\t\tassert(oid2.equals(oid));\n+\t}\n }\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/transport/RefSpecTestCase.java\nb/org.spearce.jgit.test/tst/org/spearce/jgit/transport/RefSpecTestCase.java\nindex 341b4a4..ad100a7 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/transport/RefSpecTestCase.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/transport/RefSpecTestCase.java\n@@ -38,12 +38,17 @@\n\n package org.spearce.jgit.transport;\n\n+import java.io.ByteArrayInputStream;\n+import java.io.ByteArrayOutputStream;\n+import java.io.ObjectInputStream;\n+import java.io.ObjectOutputStream;\n+\n import junit.framework.TestCase;\n\n import org.spearce.jgit.lib.Ref;\n\n public class RefSpecTestCase extends TestCase {\n-\tpublic void testMasterMaster() {\n+\tpublic void testMasterMaster() throws Exception {\n \t\tfinal String sn = \"refs/heads/master\";\n \t\tfinal RefSpec rs = new RefSpec(sn + \":\" + sn);\n \t\tassertFalse(rs.isForceUpdate());\n@@ -61,9 +66,11 @@ public void testMasterMaster() {\n \t\tr = new Ref(Ref.Storage.LOOSE, sn + \"-and-more\", null);\n \t\tassertFalse(rs.matchSource(r));\n \t\tassertFalse(rs.matchDestination(r));\n+\t\t\n+\t\tassertRoundTrip(rs);\n \t}\n\n-\tpublic void testForceMasterMaster() {\n+\tpublic void testForceMasterMaster() throws Exception {\n \t\tfinal String sn = \"refs/heads/master\";\n \t\tfinal RefSpec rs = new RefSpec(\"+\" + sn + \":\" + sn);\n \t\tassertTrue(rs.isForceUpdate());\n@@ -81,9 +88,11 @@ public void testForceMasterMaster() {\n \t\tr = new Ref(Ref.Storage.LOOSE, sn + \"-and-more\", null);\n \t\tassertFalse(rs.matchSource(r));\n \t\tassertFalse(rs.matchDestination(r));\n+\t\t\n+\t\tassertRoundTrip(rs);\n \t}\n\n-\tpublic void testMaster() {\n+\tpublic void testMaster() throws Exception {\n \t\tfinal String sn = \"refs/heads/master\";\n \t\tfinal RefSpec rs = new RefSpec(sn);\n \t\tassertFalse(rs.isForceUpdate());\n@@ -101,9 +110,11 @@ public void testMaster() {\n \t\tr = new Ref(Ref.Storage.LOOSE, sn + \"-and-more\", null);\n \t\tassertFalse(rs.matchSource(r));\n \t\tassertFalse(rs.matchDestination(r));\n+\t\t\n+\t\tassertRoundTrip(rs);\n \t}\n\n-\tpublic void testForceMaster() {\n+\tpublic void testForceMaster() throws Exception {\n \t\tfinal String sn = \"refs/heads/master\";\n \t\tfinal RefSpec rs = new RefSpec(\"+\" + sn);\n \t\tassertTrue(rs.isForceUpdate());\n@@ -121,9 +132,11 @@ public void testForceMaster() {\n \t\tr = new Ref(Ref.Storage.LOOSE, sn + \"-and-more\", null);\n \t\tassertFalse(rs.matchSource(r));\n \t\tassertFalse(rs.matchDestination(r));\n+\t\t\n+\t\tassertRoundTrip(rs);\n \t}\n\n-\tpublic void testDeleteMaster() {\n+\tpublic void testDeleteMaster() throws Exception {\n \t\tfinal String sn = \"refs/heads/master\";\n \t\tfinal RefSpec rs = new RefSpec(\":\" + sn);\n \t\tassertFalse(rs.isForceUpdate());\n@@ -141,9 +154,11 @@ public void testDeleteMaster() {\n \t\tr = new Ref(Ref.Storage.LOOSE, sn + \"-and-more\", null);\n \t\tassertFalse(rs.matchSource(r));\n \t\tassertFalse(rs.matchDestination(r));\n+\t\t\n+\t\tassertRoundTrip(rs);\n \t}\n\n-\tpublic void testForceRemotesOrigin() {\n+\tpublic void testForceRemotesOrigin() throws Exception {\n \t\tfinal String srcn = \"refs/heads/*\";\n \t\tfinal String dstn = \"refs/remotes/origin/*\";\n \t\tfinal RefSpec rs = new RefSpec(\"+\" + srcn + \":\" + dstn);\n@@ -174,18 +189,22 @@ public void testForceRemotesOrigin() {\n \t\tr = new Ref(Ref.Storage.LOOSE, \"refs/tags/v1.0\", null);\n \t\tassertFalse(rs.matchSource(r));\n \t\tassertFalse(rs.matchDestination(r));\n+\t\t\n+\t\tassertRoundTrip(rs);\n \t}\n\n-\tpublic void testCreateEmpty() {\n+\tpublic void testCreateEmpty() throws Exception {\n \t\tfinal RefSpec rs = new RefSpec();\n \t\tassertFalse(rs.isForceUpdate());\n \t\tassertFalse(rs.isWildcard());\n \t\tassertEquals(\"HEAD\", rs.getSource());\n \t\tassertNull(rs.getDestination());\n \t\tassertEquals(\"HEAD\", rs.toString());\n+\t\tassertRoundTrip(rs);\n+\t\t\n \t}\n\n-\tpublic void testSetForceUpdate() {\n+\tpublic void testSetForceUpdate() throws Exception {\n \t\tfinal String s = \"refs/heads/*:refs/remotes/origin/*\";\n \t\tfinal RefSpec a = new RefSpec(s);\n \t\tassertFalse(a.isForceUpdate());\n@@ -195,25 +214,31 @@ public void testSetForceUpdate() {\n \t\tassertTrue(b.isForceUpdate());\n \t\tassertEquals(s, a.toString());\n \t\tassertEquals(\"+\" + s, b.toString());\n+\t\tassertRoundTrip(a);\n+\t\tassertRoundTrip(b);\n \t}\n\n-\tpublic void testSetSource() {\n+\tpublic void testSetSource() throws Exception {\n \t\tfinal RefSpec a = new RefSpec();\n \t\tfinal RefSpec b = a.setSource(\"refs/heads/master\");\n \t\tassertNotSame(a, b);\n \t\tassertEquals(\"HEAD\", a.toString());\n \t\tassertEquals(\"refs/heads/master\", b.toString());\n+\t\tassertRoundTrip(a);\n+\t\tassertRoundTrip(b);\n \t}\n\n-\tpublic void testSetDestination() {\n+\tpublic void testSetDestination() throws Exception {\n \t\tfinal RefSpec a = new RefSpec();\n \t\tfinal RefSpec b = a.setDestination(\"refs/heads/master\");\n \t\tassertNotSame(a, b);\n \t\tassertEquals(\"HEAD\", a.toString());\n \t\tassertEquals(\"HEAD:refs/heads/master\", b.toString());\n+\t\tassertRoundTrip(a);\n+\t\tassertRoundTrip(b);\n \t}\n\n-\tpublic void testSetDestination_SourceNull() {\n+\tpublic void testSetDestination_SourceNull() throws Exception {\n \t\tfinal RefSpec a = new RefSpec();\n \t\tRefSpec b;\n\n@@ -222,14 +247,33 @@ public void testSetDestination_SourceNull() {\n \t\tassertNotSame(a, b);\n \t\tassertEquals(\"HEAD\", a.toString());\n \t\tassertEquals(\":refs/heads/master\", b.toString());\n+\t\tassertRoundTrip(a);\n+\t\tassertRoundTrip(b);\n \t}\n\n-\tpublic void testSetSourceDestination() {\n+\tpublic void testSetSourceDestination() throws Exception {\n \t\tfinal RefSpec a = new RefSpec();\n \t\tfinal RefSpec b;\n \t\tb = a.setSourceDestination(\"refs/heads/*\", \"refs/remotes/origin/*\");\n \t\tassertNotSame(a, b);\n \t\tassertEquals(\"HEAD\", a.toString());\n \t\tassertEquals(\"refs/heads/*:refs/remotes/origin/*\", b.toString());\n+\t\tassertRoundTrip(a);\n+\t\tassertRoundTrip(b);\n+\t\t\n+\t}\n+\t\n+\tprotected void assertRoundTrip(RefSpec refspec) throws Exception {\n+\t\tByteArrayOutputStream stream = new ByteArrayOutputStream();\n+\t\tObjectOutputStream out = new ObjectOutputStream(stream);\n+\t\tout.writeObject(refspec);\n+\t\tout.close();\n+\n+\t\tObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(\n+\t\t\t\tstream.toByteArray()));\n+\t\tRefSpec refspec2 = (RefSpec) in.readObject();\n+\t\tin.close();\n+\t\t\n+\t\tassertEquals(refspec, refspec2);\n \t}\n }\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/transport/RemoteConfigTest.java\nb/org.spearce.jgit.test/tst/org/spearce/jgit/transport/RemoteConfigTest.java\nindex 6b72b64..f1deb86 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/transport/RemoteConfigTest.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/transport/RemoteConfigTest.java\n@@ -38,10 +38,14 @@\n\n package org.spearce.jgit.transport;\n\n+import java.io.ByteArrayInputStream;\n+import java.io.ByteArrayOutputStream;\n import java.io.File;\n import java.io.FileNotFoundException;\n import java.io.FileOutputStream;\n import java.io.IOException;\n+import java.io.ObjectInputStream;\n+import java.io.ObjectOutputStream;\n import java.io.UnsupportedEncodingException;\n import java.util.List;\n\n@@ -91,6 +95,8 @@ writeConfig(\"[remote \\\"spearce\\\"]\\n\"\n \t\tassertEquals(\"refs/remotes/spearce/*\", spec.getDestination());\n\n \t\tassertEquals(0, rc.getPushRefSpecs().size());\n+\t\t\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testSimpleNoTags() throws Exception {\n@@ -100,6 +106,7 @@ writeConfig(\"[remote \\\"spearce\\\"]\\n\"\n \t\t\t\t+ \"tagopt = --no-tags\\n\");\n \t\tfinal RemoteConfig rc = new RemoteConfig(db.getConfig(), \"spearce\");\n \t\tassertSame(TagOpt.NO_TAGS, rc.getTagOpt());\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testSimpleAlwaysTags() throws Exception {\n@@ -109,6 +116,7 @@ writeConfig(\"[remote \\\"spearce\\\"]\\n\"\n \t\t\t\t+ \"tagopt = --tags\\n\");\n \t\tfinal RemoteConfig rc = new RemoteConfig(db.getConfig(), \"spearce\");\n \t\tassertSame(TagOpt.FETCH_TAGS, rc.getTagOpt());\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testMirror() throws Exception {\n@@ -144,6 +152,7 @@ writeConfig(\"[remote \\\"spearce\\\"]\\n\"\n \t\tassertEquals(\"refs/tags/*\", spec.getDestination());\n\n \t\tassertEquals(0, rc.getPushRefSpecs().size());\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testBackup() throws Exception {\n@@ -180,6 +189,7 @@ writeConfig(\"[remote \\\"backup\\\"]\\n\"\n \t\tassertTrue(spec.isWildcard());\n \t\tassertEquals(\"refs/tags/*\", spec.getSource());\n \t\tassertEquals(\"refs/tags/*\", spec.getDestination());\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testUploadPack() throws Exception {\n@@ -212,6 +222,7 @@ writeConfig(\"[remote \\\"example\\\"]\\n\"\n\n \t\tassertEquals(\"/path/to/git/git-upload-pack\", rc.getUploadPack());\n \t\tassertEquals(\"/path/to/git/git-receive-pack\", rc.getReceivePack());\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testUnknown() throws Exception {\n@@ -223,6 +234,7 @@ public void testUnknown() throws Exception {\n \t\tassertEquals(0, rc.getPushRefSpecs().size());\n \t\tassertEquals(\"git-upload-pack\", rc.getUploadPack());\n \t\tassertEquals(\"git-receive-pack\", rc.getReceivePack());\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testAddURI() throws Exception {\n@@ -238,6 +250,7 @@ public void testAddURI() throws Exception {\n\n \t\tassertFalse(rc.addURI(new URIish(uri.toString())));\n \t\tassertEquals(1, rc.getURIs().size());\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testRemoveFirstURI() throws Exception {\n@@ -260,6 +273,7 @@ public void testRemoveFirstURI() throws Exception {\n \t\tassertEquals(2, rc.getURIs().size());\n \t\tassertSame(b, rc.getURIs().get(0));\n \t\tassertSame(c, rc.getURIs().get(1));\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testRemoveMiddleURI() throws Exception {\n@@ -282,6 +296,7 @@ public void testRemoveMiddleURI() throws Exception {\n \t\tassertEquals(2, rc.getURIs().size());\n \t\tassertSame(a, rc.getURIs().get(0));\n \t\tassertSame(c, rc.getURIs().get(1));\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testRemoveLastURI() throws Exception {\n@@ -304,6 +319,7 @@ public void testRemoveLastURI() throws Exception {\n \t\tassertEquals(2, rc.getURIs().size());\n \t\tassertSame(a, rc.getURIs().get(0));\n \t\tassertSame(b, rc.getURIs().get(1));\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testRemoveOnlyURI() throws Exception {\n@@ -318,6 +334,7 @@ public void testRemoveOnlyURI() throws Exception {\n\n \t\tassertTrue(rc.removeURI(a));\n \t\tassertEquals(0, rc.getURIs().size());\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testCreateOrigin() throws Exception {\n@@ -332,6 +349,7 @@ checkFile(new File(db.getDirectory(), \"config\"), \"[core]\\n\"\n \t\t\t\t+ \"\\trepositoryformatversion = 0\\n\" + \"\\tfilemode = true\\n\"\n \t\t\t\t+ \"[remote \\\"origin\\\"]\\n\" + \"\\turl = /some/dir\\n\"\n \t\t\t\t+ \"\\tfetch = +refs/heads/*:refs/remotes/origin/*\\n\");\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testSaveAddURI() throws Exception {\n@@ -351,6 +369,7 @@ checkFile(new File(db.getDirectory(), \"config\"), \"[core]\\n\"\n \t\t\t\t+ \"\\turl = http://www.spearce.org/egit.git\\n\"\n \t\t\t\t+ \"\\turl = /some/dir\\n\"\n \t\t\t\t+ \"\\tfetch = +refs/heads/*:refs/remotes/spearce/*\\n\");\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testSaveRemoveLastURI() throws Exception {\n@@ -371,6 +390,7 @@ checkFile(new File(db.getDirectory(), \"config\"), \"[core]\\n\"\n \t\t\t\t+ \"[remote \\\"spearce\\\"]\\n\"\n \t\t\t\t+ \"\\turl = http://www.spearce.org/egit.git\\n\"\n \t\t\t\t+ \"\\tfetch = +refs/heads/*:refs/remotes/spearce/*\\n\");\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testSaveRemoveFirstURI() throws Exception {\n@@ -390,6 +410,7 @@ checkFile(new File(db.getDirectory(), \"config\"), \"[core]\\n\"\n \t\t\t\t+ \"\\trepositoryformatversion = 0\\n\" + \"\\tfilemode = true\\n\"\n \t\t\t\t+ \"[remote \\\"spearce\\\"]\\n\" + \"\\turl = /some/dir\\n\"\n \t\t\t\t+ \"\\tfetch = +refs/heads/*:refs/remotes/spearce/*\\n\");\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testSaveNoTags() throws Exception {\n@@ -406,6 +427,7 @@ checkFile(new File(db.getDirectory(), \"config\"), \"[core]\\n\"\n \t\t\t\t+ \"[remote \\\"origin\\\"]\\n\" + \"\\turl = /some/dir\\n\"\n \t\t\t\t+ \"\\tfetch = +refs/heads/*:refs/remotes/origin/*\\n\"\n \t\t\t\t+ \"\\ttagopt = --no-tags\\n\");\n+\t\tcheckRoundTrip(rc);\n \t}\n\n \tpublic void testSaveAllTags() throws Exception {\n@@ -422,5 +444,40 @@ checkFile(new File(db.getDirectory(), \"config\"), \"[core]\\n\"\n \t\t\t\t+ \"[remote \\\"origin\\\"]\\n\" + \"\\turl = /some/dir\\n\"\n \t\t\t\t+ \"\\tfetch = +refs/heads/*:refs/remotes/origin/*\\n\"\n \t\t\t\t+ \"\\ttagopt = --tags\\n\");\n+\t\tcheckRoundTrip(rc);\n+\t}\n+\t\n+\tprotected void checkRoundTrip(RemoteConfig rc) throws IOException,\nClassNotFoundException {\n+\t\tByteArrayOutputStream stream = new ByteArrayOutputStream();\n+\t\tObjectOutputStream out = new ObjectOutputStream(stream);\n+\t\tout.writeObject(rc);\n+\t\tout.close();\n+\n+\t\tObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(\n+\t\t\t\tstream.toByteArray()));\n+\t\tRemoteConfig rc2 = (RemoteConfig) in.readObject();\n+\t\tin.close();\n+\n+\t\tassertEquals(rc.getName(), rc2.getName());\n+\t\tassertEquals(rc.getUploadPack(), rc2.getUploadPack());\n+\t\tassertEquals(rc.getTagOpt(), rc2.getTagOpt());\n+\n+\t\tassertEquals(rc.getURIs().size(), rc2.getURIs().size());\n+\t\tassertEquals(rc.getFetchRefSpecs().size(), rc2.getFetchRefSpecs()\n+\t\t\t\t.size());\n+\t\tassertEquals(rc.getPushRefSpecs().size(), rc2.getPushRefSpecs().size());\n+\n+\t\tfor (URIish uri : rc.getURIs()) {\n+\t\t\tassertTrue (rc2.getURIs().contains(uri));\n+\t\t}\n+\n+\t\tfor (RefSpec refspec : rc.getFetchRefSpecs()) {\n+\t\t    assertTrue (rc2.getFetchRefSpecs().contains(refspec));\n+\t\t}\n+\n+\t\tfor (RefSpec refspec : rc.getPushRefSpecs()) {\n+\t\t    assertTrue (rc2.getPushRefSpecs().contains(refspec));\n+\t\t}\n+\n \t}\n }\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/transport/URIishTest.java\nb/org.spearce.jgit.test/tst/org/spearce/jgit/transport/URIishTest.java\nindex 2ea9d60..beb2e88 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/transport/URIishTest.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/transport/URIishTest.java\n@@ -38,6 +38,11 @@\n\n package org.spearce.jgit.transport;\n\n+import java.io.ByteArrayInputStream;\n+import java.io.ByteArrayOutputStream;\n+import java.io.ObjectInputStream;\n+import java.io.ObjectOutputStream;\n+\n import junit.framework.TestCase;\n\n public class URIishTest extends TestCase {\n@@ -50,6 +55,7 @@ public void testUnixFile() throws Exception {\n \t\tassertEquals(str, u.getPath());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testWindowsFile() throws Exception {\n@@ -60,6 +66,7 @@ public void testWindowsFile() throws Exception {\n \t\tassertEquals(str, u.getPath());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testWindowsFile2() throws Exception {\n@@ -70,6 +77,7 @@ public void testWindowsFile2() throws Exception {\n \t\tassertEquals(\"D:/m y\", u.getPath());\n \t\tassertEquals(\"D:/m y\", u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testUNC() throws Exception {\n@@ -80,6 +88,7 @@ public void testUNC() throws Exception {\n \t\tassertEquals(\"//some/place\", u.getPath());\n \t\tassertEquals(\"//some/place\", u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testFileProtoUnix() throws Exception {\n@@ -90,6 +99,7 @@ public void testFileProtoUnix() throws Exception {\n \t\tassertEquals(\"/home/m y\", u.getPath());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testFileProtoWindows() throws Exception {\n@@ -100,6 +110,7 @@ public void testFileProtoWindows() throws Exception {\n \t\tassertEquals(\"D:/m y\", u.getPath());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testGitProtoUnix() throws Exception {\n@@ -111,6 +122,7 @@ public void testGitProtoUnix() throws Exception {\n \t\tassertEquals(\"/home/m y\", u.getPath());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testGitProtoUnixPort() throws Exception {\n@@ -123,6 +135,7 @@ public void testGitProtoUnixPort() throws Exception {\n \t\tassertEquals(333, u.getPort());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testGitProtoWindowsPort() throws Exception {\n@@ -135,6 +148,7 @@ public void testGitProtoWindowsPort() throws Exception {\n \t\tassertEquals(\"example.com\", u.getHost());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testGitProtoWindows() throws Exception {\n@@ -147,6 +161,7 @@ public void testGitProtoWindows() throws Exception {\n \t\tassertEquals(-1, u.getPort());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testScpStyleWithoutUser() throws Exception {\n@@ -159,6 +174,7 @@ public void testScpStyleWithoutUser() throws Exception {\n \t\tassertEquals(-1, u.getPort());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testScpStyleWithUser() throws Exception {\n@@ -172,6 +188,7 @@ public void testScpStyleWithUser() throws Exception {\n \t\tassertEquals(-1, u.getPort());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testGitSshProto() throws Exception {\n@@ -184,6 +201,7 @@ public void testGitSshProto() throws Exception {\n \t\tassertEquals(-1, u.getPort());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testSshGitProto() throws Exception {\n@@ -196,6 +214,7 @@ public void testSshGitProto() throws Exception {\n \t\tassertEquals(-1, u.getPort());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testSshProto() throws Exception {\n@@ -208,6 +227,7 @@ public void testSshProto() throws Exception {\n \t\tassertEquals(-1, u.getPort());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testSshProtoWithUserAndPort() throws Exception {\n@@ -222,6 +242,7 @@ public void testSshProtoWithUserAndPort() throws Exception {\n \t\tassertEquals(33, u.getPort());\n \t\tassertEquals(str, u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n \t}\n\n \tpublic void testSshProtoWithUserPassAndPort() throws Exception {\n@@ -237,5 +258,20 @@ public void testSshProtoWithUserPassAndPort()\nthrows Exception {\n \t\tassertEquals(str, u.toPrivateString());\n \t\tassertEquals(u.setPass(null).toPrivateString(), u.toString());\n \t\tassertEquals(u, new URIish(str));\n+\t\tassertRoundTrip(u);\n+\t}\n+\t\n+\tprotected void assertRoundTrip(URIish uri) throws Exception {\n+\t\tByteArrayOutputStream stream = new ByteArrayOutputStream();\n+\t\tObjectOutputStream out = new ObjectOutputStream(stream);\n+\t\tout.writeObject(uri);\n+\t\tout.close();\n+\n+\t\tObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(\n+\t\t\t\tstream.toByteArray()));\n+\t\tURIish uri2 = (URIish) in.readObject();\n+\t\tin.close();\n+\t\t\n+\t\tassert(uri2.equals(uri));\n \t}\n }\n-- \n1.6.0.2\n"}]}