{"thread":{"id":"20036","subject":"[JGIT PATCH] Add more tests for AbstractTreeIterator","startedAt":"2009-07-06T16:52:08Z","lastAt":"2009-07-06T16:52:08Z","messageCount":1,"participants":["Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"117509","messageId":"1246899128-8201-1-git-send-email-spearce@spearce.org","threadId":"20036","inReplyTo":null,"subject":"[JGIT PATCH] Add more tests for AbstractTreeIterator","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2009-07-06T16:52:08Z","receivedAt":"2009-07-06T16:52:08Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Signed-off-by: Shawn O. Pearce <spearce@spearce.org>\nCC: Constantine Plotnikov <constantine.plotnikov@gmail.com>\n---\n .../jgit/treewalk/AbstractTreeIteratorTest.java    |   91 +++++++++++++++++++-\n 1 files changed, 88 insertions(+), 3 deletions(-)\n\ndiff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/treewalk/AbstractTreeIteratorTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/treewalk/AbstractTreeIteratorTest.java\nindex 562053e..ed4936b 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/treewalk/AbstractTreeIteratorTest.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/treewalk/AbstractTreeIteratorTest.java\n@@ -42,16 +42,27 @@\n import junit.framework.TestCase;\n \n import org.spearce.jgit.errors.IncorrectObjectTypeException;\n+import org.spearce.jgit.lib.Constants;\n import org.spearce.jgit.lib.FileMode;\n import org.spearce.jgit.lib.Repository;\n \n \n public class AbstractTreeIteratorTest extends TestCase {\n+\tprivate static String prefix(String path) {\n+\t\tfinal int s = path.lastIndexOf('/');\n+\t\treturn s > 0 ? path.substring(0, s) : \"\";\n+\t}\n+\n \tpublic class FakeTreeIterator extends WorkingTreeIterator {\n-\t\tpublic FakeTreeIterator(String path, FileMode fileMode) {\n-\t\t\tsuper(path);\n+\t\tpublic FakeTreeIterator(String pathName, FileMode fileMode) {\n+\t\t\tsuper(prefix(pathName));\n \t\t\tmode = fileMode.getBits();\n-\t\t\tpathLen -= 1; // Get rid of extra '/'\n+\n+\t\t\tfinal int s = pathName.lastIndexOf('/');\n+\t\t\tfinal byte[] name = Constants.encode(pathName.substring(s + 1));\n+\t\t\tensurePathCapacity(pathOffset + name.length, pathOffset);\n+\t\t\tSystem.arraycopy(name, 0, path, pathOffset, name.length);\n+\t\t\tpathLen = pathOffset + name.length;\n \t\t}\n \n \t\t@Override\n@@ -74,4 +85,78 @@ public void testPathCompare() throws Exception {\n \t\tassertTrue(new FakeTreeIterator(\"a\", FileMode.TREE).pathCompare(\n \t\t\t\tnew FakeTreeIterator(\"a\", FileMode.TREE)) == 0);\n \t}\n+\n+\tpublic void testGrowPath() throws Exception {\n+\t\tfinal FakeTreeIterator i = new FakeTreeIterator(\"ab\", FileMode.TREE);\n+\t\tfinal byte[] origpath = i.path;\n+\t\tassertEquals(i.path[0], 'a');\n+\t\tassertEquals(i.path[1], 'b');\n+\n+\t\ti.growPath(2);\n+\n+\t\tassertNotSame(origpath, i.path);\n+\t\tassertEquals(origpath.length * 2, i.path.length);\n+\t\tassertEquals(i.path[0], 'a');\n+\t\tassertEquals(i.path[1], 'b');\n+\t}\n+\n+\tpublic void testEnsurePathCapacityFastCase() throws Exception {\n+\t\tfinal FakeTreeIterator i = new FakeTreeIterator(\"ab\", FileMode.TREE);\n+\t\tfinal int want = 50;\n+\t\tfinal byte[] origpath = i.path;\n+\t\tassertEquals(i.path[0], 'a');\n+\t\tassertEquals(i.path[1], 'b');\n+\t\tassertTrue(want < i.path.length);\n+\n+\t\ti.ensurePathCapacity(want, 2);\n+\n+\t\tassertSame(origpath, i.path);\n+\t\tassertEquals(i.path[0], 'a');\n+\t\tassertEquals(i.path[1], 'b');\n+\t}\n+\n+\tpublic void testEnsurePathCapacityGrows() throws Exception {\n+\t\tfinal FakeTreeIterator i = new FakeTreeIterator(\"ab\", FileMode.TREE);\n+\t\tfinal int want = 384;\n+\t\tfinal byte[] origpath = i.path;\n+\t\tassertEquals(i.path[0], 'a');\n+\t\tassertEquals(i.path[1], 'b');\n+\t\tassertTrue(i.path.length < want);\n+\n+\t\ti.ensurePathCapacity(want, 2);\n+\n+\t\tassertNotSame(origpath, i.path);\n+\t\tassertEquals(512, i.path.length);\n+\t\tassertEquals(i.path[0], 'a');\n+\t\tassertEquals(i.path[1], 'b');\n+\t}\n+\n+\tpublic void testEntryFileMode() {\n+\t\tfor (FileMode m : new FileMode[] { FileMode.TREE,\n+\t\t\t\tFileMode.REGULAR_FILE, FileMode.EXECUTABLE_FILE,\n+\t\t\t\tFileMode.GITLINK, FileMode.SYMLINK }) {\n+\t\t\tfinal FakeTreeIterator i = new FakeTreeIterator(\"a\", m);\n+\t\t\tassertEquals(m.getBits(), i.getEntryRawMode());\n+\t\t\tassertSame(m, i.getEntryFileMode());\n+\t\t}\n+\t}\n+\n+\tpublic void testEntryPath() {\n+\t\tFakeTreeIterator i = new FakeTreeIterator(\"a/b/cd\", FileMode.TREE);\n+\t\tassertEquals(\"a/b/cd\", i.getEntryPathString());\n+\t\tassertEquals(2, i.getNameLength());\n+\t\tbyte[] b = new byte[3];\n+\t\tb[0] = 0x0a;\n+\t\ti.getName(b, 1);\n+\t\tassertEquals(0x0a, b[0]);\n+\t\tassertEquals('c', b[1]);\n+\t\tassertEquals('d', b[2]);\n+\t}\n+\n+\tpublic void testCreateEmptyTreeIterator() {\n+\t\tFakeTreeIterator i = new FakeTreeIterator(\"a/b/cd\", FileMode.TREE);\n+\t\tEmptyTreeIterator e = i.createEmptyTreeIterator();\n+\t\tassertNotNull(e);\n+\t\tassertEquals(i.getEntryPathString() + \"/\", e.getEntryPathString());\n+\t}\n }\n-- \n1.6.3.3.507.gc6b5a\n"}]}