summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
authorMatthias Sohn <matthias.sohn@sap.com>2011-06-02 01:45:50 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2011-06-02 01:45:50 +0200
commitf0d62fc609e70200de1a7439cd89059dfe5740b2 (patch)
tree6d5f3619bccb02d3a62c919b7262c4d280a2dcf1 /org.eclipse.jgit.test
parent8b8ad75ada9d90f8b26e69ca04d4bf512bf43dd4 (diff)
parentada903085d1b4ef8c79e3e2d91f49fee7e188f53 (diff)
downloadjgit-f0d62fc609e70200de1a7439cd89059dfe5740b2.tar.gz
jgit-f0d62fc609e70200de1a7439cd89059dfe5740b2.zip
Merge branch 'stable-1.0'
* stable-1.0: Prepare post v1.0.0.201106011211-rc3 builds JGit v1.0.0.201106011211-rc3 Remove incubation marker blame: Compute the origin of lines in a result file
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/META-INF/MANIFEST.MF1
-rw-r--r--org.eclipse.jgit.test/plugin.properties2
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java271
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/blame/BlameGeneratorTest.java143
4 files changed, 416 insertions, 1 deletions
diff --git a/org.eclipse.jgit.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
index 8ec0b6582f..b1736472ee 100644
--- a/org.eclipse.jgit.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
@@ -11,6 +11,7 @@ Import-Package: org.eclipse.jgit;version="[1.0.0,1.1.0)",
org.eclipse.jgit.api;version="[1.0.0,1.1.0)",
org.eclipse.jgit.api.errors;version="[1.0.0,1.1.0)",
org.eclipse.jgit.awtui;version="[1.0.0,1.1.0)",
+ org.eclipse.jgit.blame;version="[1.0.0,1.1.0)",
org.eclipse.jgit.console;version="[1.0.0,1.1.0)",
org.eclipse.jgit.diff;version="[1.0.0,1.1.0)",
org.eclipse.jgit.dircache;version="[1.0.0,1.1.0)",
diff --git a/org.eclipse.jgit.test/plugin.properties b/org.eclipse.jgit.test/plugin.properties
index 5370431b57..ea60411212 100644
--- a/org.eclipse.jgit.test/plugin.properties
+++ b/org.eclipse.jgit.test/plugin.properties
@@ -1,2 +1,2 @@
-plugin_name=JGit Core Tests (Incubation)
+plugin_name=JGit Core Tests
provider_name=Eclipse.org
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java
new file mode 100644
index 0000000000..1f67807e46
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java
@@ -0,0 +1,271 @@
+/*
+ * Copyright (C) 2011, GitHub Inc.
+ * and other copyright owners as documented in the project's IP log.
+ *
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Distribution License v1.0 which
+ * accompanies this distribution, is reproduced below, and is
+ * available at http://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Eclipse Foundation, Inc. nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.eclipse.jgit.api;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.eclipse.jgit.blame.BlameResult;
+import org.eclipse.jgit.lib.RepositoryTestCase;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.Test;
+
+/**
+ * Unit tests of {@link BlameCommand}
+ */
+public class BlameCommandTest extends RepositoryTestCase {
+
+ private String join(String... lines) {
+ StringBuilder joined = new StringBuilder();
+ for (String line : lines)
+ joined.append(line).append('\n');
+ return joined.toString();
+ }
+
+ @Test
+ public void testSingleRevision() throws Exception {
+ Git git = new Git(db);
+
+ String[] content = new String[] { "first", "second", "third" };
+
+ writeTrashFile("file.txt", join(content));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit commit = git.commit().setMessage("create file").call();
+
+ BlameCommand command = new BlameCommand(db);
+ command.setFilePath("file.txt");
+ BlameResult lines = command.call();
+ assertNotNull(lines);
+ assertEquals(3, lines.getResultContents().size());
+
+ for (int i = 0; i < 3; i++) {
+ assertEquals(commit, lines.getSourceCommit(i));
+ assertEquals(i, lines.getSourceLine(i));
+ }
+ }
+
+ @Test
+ public void testTwoRevisions() throws Exception {
+ Git git = new Git(db);
+
+ String[] content1 = new String[] { "first", "second" };
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit commit1 = git.commit().setMessage("create file").call();
+
+ String[] content2 = new String[] { "first", "second", "third" };
+ writeTrashFile("file.txt", join(content2));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit commit2 = git.commit().setMessage("create file").call();
+
+ BlameCommand command = new BlameCommand(db);
+ command.setFilePath("file.txt");
+ BlameResult lines = command.call();
+ assertEquals(3, lines.getResultContents().size());
+
+ assertEquals(commit1, lines.getSourceCommit(0));
+ assertEquals(0, lines.getSourceLine(0));
+
+ assertEquals(commit1, lines.getSourceCommit(1));
+ assertEquals(1, lines.getSourceLine(1));
+
+ assertEquals(commit2, lines.getSourceCommit(2));
+ assertEquals(2, lines.getSourceLine(2));
+ }
+
+ @Test
+ public void testRename() throws Exception {
+ Git git = new Git(db);
+
+ String[] content1 = new String[] { "a", "b", "c" };
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit commit1 = git.commit().setMessage("create file").call();
+
+ writeTrashFile("file1.txt", join(content1));
+ git.add().addFilepattern("file1.txt").call();
+ git.rm().addFilepattern("file.txt").call();
+ git.commit().setMessage("moving file").call();
+
+ String[] content2 = new String[] { "a", "b", "c2" };
+ writeTrashFile("file1.txt", join(content2));
+ git.add().addFilepattern("file1.txt").call();
+ RevCommit commit3 = git.commit().setMessage("editing file").call();
+
+ BlameCommand command = new BlameCommand(db);
+ command.setFollowFileRenames(true);
+ command.setFilePath("file1.txt");
+ BlameResult lines = command.call();
+
+ assertEquals(commit1, lines.getSourceCommit(0));
+ assertEquals(0, lines.getSourceLine(0));
+ assertEquals("file.txt", lines.getSourcePath(0));
+
+ assertEquals(commit1, lines.getSourceCommit(1));
+ assertEquals(1, lines.getSourceLine(1));
+ assertEquals("file.txt", lines.getSourcePath(1));
+
+ assertEquals(commit3, lines.getSourceCommit(2));
+ assertEquals(2, lines.getSourceLine(2));
+ assertEquals("file1.txt", lines.getSourcePath(2));
+ }
+
+ @Test
+ public void testDeleteTrailingLines() throws Exception {
+ Git git = new Git(db);
+
+ String[] content1 = new String[] { "a", "b", "c", "d" };
+ String[] content2 = new String[] { "a", "b" };
+
+ writeTrashFile("file.txt", join(content2));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit commit1 = git.commit().setMessage("create file").call();
+
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("edit file").call();
+
+ writeTrashFile("file.txt", join(content2));
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("edit file").call();
+
+ BlameCommand command = new BlameCommand(db);
+
+ command.setFilePath("file.txt");
+ BlameResult lines = command.call();
+ assertEquals(content2.length, lines.getResultContents().size());
+
+ assertEquals(commit1, lines.getSourceCommit(0));
+ assertEquals(commit1, lines.getSourceCommit(1));
+
+ assertEquals(0, lines.getSourceLine(0));
+ assertEquals(1, lines.getSourceLine(1));
+ }
+
+ @Test
+ public void testDeleteMiddleLines() throws Exception {
+ Git git = new Git(db);
+
+ String[] content1 = new String[] { "a", "b", "c", "d", "e" };
+ String[] content2 = new String[] { "a", "c", "e" };
+
+ writeTrashFile("file.txt", join(content2));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit commit1 = git.commit().setMessage("edit file").call();
+
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("edit file").call();
+
+ writeTrashFile("file.txt", join(content2));
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("edit file").call();
+
+ BlameCommand command = new BlameCommand(db);
+
+ command.setFilePath("file.txt");
+ BlameResult lines = command.call();
+ assertEquals(content2.length, lines.getResultContents().size());
+
+ assertEquals(commit1, lines.getSourceCommit(0));
+ assertEquals(0, lines.getSourceLine(0));
+
+ assertEquals(commit1, lines.getSourceCommit(1));
+ assertEquals(1, lines.getSourceLine(1));
+
+ assertEquals(commit1, lines.getSourceCommit(2));
+ assertEquals(2, lines.getSourceLine(2));
+ }
+
+ @Test
+ public void testEditAllLines() throws Exception {
+ Git git = new Git(db);
+
+ String[] content1 = new String[] { "a", "1" };
+ String[] content2 = new String[] { "b", "2" };
+
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("edit file").call();
+
+ writeTrashFile("file.txt", join(content2));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit commit2 = git.commit().setMessage("create file").call();
+
+ BlameCommand command = new BlameCommand(db);
+
+ command.setFilePath("file.txt");
+ BlameResult lines = command.call();
+ assertEquals(content2.length, lines.getResultContents().size());
+ assertEquals(commit2, lines.getSourceCommit(0));
+ assertEquals(commit2, lines.getSourceCommit(1));
+ }
+
+ @Test
+ public void testMiddleClearAllLines() throws Exception {
+ Git git = new Git(db);
+
+ String[] content1 = new String[] { "a", "b", "c" };
+
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("edit file").call();
+
+ writeTrashFile("file.txt", "");
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("create file").call();
+
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit commit3 = git.commit().setMessage("edit file").call();
+
+ BlameCommand command = new BlameCommand(db);
+
+ command.setFilePath("file.txt");
+ BlameResult lines = command.call();
+ assertEquals(content1.length, lines.getResultContents().size());
+ assertEquals(commit3, lines.getSourceCommit(0));
+ assertEquals(commit3, lines.getSourceCommit(1));
+ assertEquals(commit3, lines.getSourceCommit(2));
+ }
+}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/blame/BlameGeneratorTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/blame/BlameGeneratorTest.java
new file mode 100644
index 0000000000..657cf38708
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/blame/BlameGeneratorTest.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2011, GitHub Inc.
+ * and other copyright owners as documented in the project's IP log.
+ *
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Distribution License v1.0 which
+ * accompanies this distribution, is reproduced below, and is
+ * available at http://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Eclipse Foundation, Inc. nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.eclipse.jgit.api.blame;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.blame.BlameGenerator;
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.RepositoryTestCase;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.Test;
+
+/** Unit tests of {@link BlameGenerator}. */
+public class BlameGeneratorTest extends RepositoryTestCase {
+ @Test
+ public void testBoundLineDelete() throws Exception {
+ Git git = new Git(db);
+
+ String[] content1 = new String[] { "first", "second" };
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit c1 = git.commit().setMessage("create file").call();
+
+ String[] content2 = new String[] { "third", "first", "second" };
+ writeTrashFile("file.txt", join(content2));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit c2 = git.commit().setMessage("create file").call();
+
+ BlameGenerator generator = new BlameGenerator(db, "file.txt");
+ try {
+ generator.push(null, db.resolve(Constants.HEAD));
+ assertEquals(3, generator.getResultContents().size());
+
+ assertTrue(generator.next());
+ assertEquals(c2, generator.getSourceCommit());
+ assertEquals(1, generator.getRegionLength());
+ assertEquals(0, generator.getResultStart());
+ assertEquals(1, generator.getResultEnd());
+ assertEquals(0, generator.getSourceStart());
+ assertEquals(1, generator.getSourceEnd());
+ assertEquals("file.txt", generator.getSourcePath());
+
+ assertTrue(generator.next());
+ assertEquals(c1, generator.getSourceCommit());
+ assertEquals(2, generator.getRegionLength());
+ assertEquals(1, generator.getResultStart());
+ assertEquals(3, generator.getResultEnd());
+ assertEquals(0, generator.getSourceStart());
+ assertEquals(2, generator.getSourceEnd());
+ assertEquals("file.txt", generator.getSourcePath());
+
+ assertFalse(generator.next());
+ } finally {
+ generator.release();
+ }
+ }
+
+ @Test
+ public void testLinesAllDeletedShortenedWalk() throws Exception {
+ Git git = new Git(db);
+
+ String[] content1 = new String[] { "first", "second", "third" };
+
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("create file").call();
+
+ String[] content2 = new String[] { "" };
+
+ writeTrashFile("file.txt", join(content2));
+ git.add().addFilepattern("file.txt").call();
+ git.commit().setMessage("create file").call();
+
+ writeTrashFile("file.txt", join(content1));
+ git.add().addFilepattern("file.txt").call();
+ RevCommit c3 = git.commit().setMessage("create file").call();
+
+ BlameGenerator generator = new BlameGenerator(db, "file.txt");
+ try {
+ generator.push(null, db.resolve(Constants.HEAD));
+ assertEquals(3, generator.getResultContents().size());
+
+ assertTrue(generator.next());
+ assertEquals(c3, generator.getSourceCommit());
+ assertEquals(0, generator.getResultStart());
+ assertEquals(3, generator.getResultEnd());
+
+ assertFalse(generator.next());
+ } finally {
+ generator.release();
+ }
+ }
+
+ private static String join(String... lines) {
+ StringBuilder joined = new StringBuilder();
+ for (String line : lines)
+ joined.append(line).append('\n');
+ return joined.toString();
+ }
+}