Make the default execute() function fail fast on first command printed "fatal: " to output. Introduced executeUnchecked() for few tests which wanted to test fatal output. Change-Id: I5b09aad9443515636811fc4d00bf8b8b9587a626 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>tags/v4.2.0.201601211800-r
@@ -48,11 +48,13 @@ import java.io.File; | |||
import java.io.IOException; | |||
import java.nio.file.Path; | |||
import java.util.ArrayList; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import org.eclipse.jgit.junit.JGitTestUtil; | |||
import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase; | |||
import org.eclipse.jgit.pgm.CLIGitCommand; | |||
import org.eclipse.jgit.pgm.Die; | |||
import org.junit.Before; | |||
public class CLIRepositoryTestCase extends LocalDiskRepositoryTestCase { | |||
@@ -79,7 +81,7 @@ public class CLIRepositoryTestCase extends LocalDiskRepositoryTestCase { | |||
* @return command output | |||
* @throws Exception | |||
*/ | |||
protected String[] execute(String... cmds) throws Exception { | |||
protected String[] executeUnchecked(String... cmds) throws Exception { | |||
List<String> result = new ArrayList<String>(cmds.length); | |||
for (String cmd : cmds) { | |||
result.addAll(CLIGitCommand.execute(cmd, db)); | |||
@@ -87,6 +89,28 @@ public class CLIRepositoryTestCase extends LocalDiskRepositoryTestCase { | |||
return result.toArray(new String[0]); | |||
} | |||
/** | |||
* Executes specified git commands (with arguments), throws exception and | |||
* stops execution on first command which output contains a 'fatal:' error | |||
* | |||
* @param cmds | |||
* each string argument must be a valid git command line, e.g. | |||
* "git branch -h" | |||
* @return command output | |||
* @throws Exception | |||
*/ | |||
protected String[] execute(String... cmds) throws Exception { | |||
List<String> result = new ArrayList<String>(cmds.length); | |||
for (String cmd : cmds) { | |||
List<String> out = CLIGitCommand.execute(cmd, db); | |||
if (contains(out, "fatal: ")) { | |||
throw new Die(toString(out)); | |||
} | |||
result.addAll(out); | |||
} | |||
return result.toArray(new String[0]); | |||
} | |||
/** | |||
* @param link | |||
* the path of the symbolic link to create | |||
@@ -196,15 +220,32 @@ public class CLIRepositoryTestCase extends LocalDiskRepositoryTestCase { | |||
} | |||
protected void assertArrayOfLinesEquals(String[] expected, String[] actual) { | |||
assertEquals(toText(expected), toText(actual)); | |||
assertEquals(toString(expected), toString(actual)); | |||
} | |||
public static String toString(String[] lines) { | |||
return toString(Arrays.asList(lines)); | |||
} | |||
private static String toText(String[] lines) { | |||
public static String toString(List<String> lines) { | |||
StringBuilder b = new StringBuilder(); | |||
for (String s : lines) { | |||
b.append(s); | |||
b.append('\n'); | |||
if (s != null && !s.isEmpty()) { | |||
b.append(s); | |||
if (!s.endsWith("\n")) { | |||
b.append('\n'); | |||
} | |||
} | |||
} | |||
return b.toString(); | |||
} | |||
public static boolean contains(List<String> lines, String str) { | |||
for (String s : lines) { | |||
if (s.contains(str)) { | |||
return true; | |||
} | |||
} | |||
return false; | |||
} | |||
} |
@@ -65,7 +65,7 @@ public class AddTest extends CLIRepositoryTestCase { | |||
@Test | |||
public void testAddNothing() throws Exception { | |||
assertEquals("fatal: Argument \"filepattern\" is required", // | |||
execute("git add")[0]); | |||
executeUnchecked("git add")[0]); | |||
} | |||
@Test |
@@ -102,7 +102,8 @@ public class ArchiveTest extends CLIRepositoryTestCase { | |||
@Test | |||
public void testUnrecognizedFormat() throws Exception { | |||
String[] expect = new String[] { "fatal: Unknown archive format 'nonsense'" }; | |||
String[] actual = execute("git archive --format=nonsense " + emptyTree); | |||
String[] actual = executeUnchecked( | |||
"git archive --format=nonsense " + emptyTree); | |||
assertArrayEquals(expect, actual); | |||
} | |||
@@ -89,6 +89,6 @@ public class BranchTest extends CLIRepositoryTestCase { | |||
@Test | |||
public void testExistingBranch() throws Exception { | |||
assertEquals("fatal: A branch named 'master' already exists.", | |||
execute("git branch master")[0]); | |||
executeUnchecked("git branch master")[0]); | |||
} | |||
} |
@@ -109,13 +109,13 @@ public class CheckoutTest extends CLIRepositoryTestCase { | |||
assertStringArrayEquals( | |||
"fatal: A branch named 'master' already exists.", | |||
execute("git checkout -b master")); | |||
executeUnchecked("git checkout -b master")); | |||
} | |||
@Test | |||
public void testCheckoutNewBranchOnBranchToBeBorn() throws Exception { | |||
assertStringArrayEquals("fatal: You are on a branch yet to be born", | |||
execute("git checkout -b side")); | |||
executeUnchecked("git checkout -b side")); | |||
} | |||
@Test |
@@ -98,16 +98,4 @@ public class CommitTest extends CLIRepositoryTestCase { | |||
result.trim().equals("On branch master")); | |||
} | |||
String toString(String[] arr) { | |||
StringBuilder sb = new StringBuilder(); | |||
for (String s : arr) { | |||
if (s != null && !s.isEmpty()) { | |||
sb.append(s); | |||
if (!s.endsWith("\n")) { | |||
sb.append('\n'); | |||
} | |||
} | |||
} | |||
return sb.toString(); | |||
} | |||
} |
@@ -73,7 +73,7 @@ public class DescribeTest extends CLIRepositoryTestCase { | |||
public void testNoHead() throws Exception { | |||
assertArrayEquals( | |||
new String[] { "fatal: No names found, cannot describe anything." }, | |||
execute("git describe")); | |||
executeUnchecked("git describe")); | |||
} | |||
@Test | |||
@@ -81,7 +81,7 @@ public class DescribeTest extends CLIRepositoryTestCase { | |||
git.commit().setMessage("initial commit").call(); | |||
assertArrayEquals( | |||
new String[] { "fatal: No names found, cannot describe anything." }, | |||
execute("git describe")); | |||
executeUnchecked("git describe")); | |||
} | |||
@Test | |||
@@ -119,7 +119,7 @@ public class DescribeTest extends CLIRepositoryTestCase { | |||
@Test | |||
public void testHelpArgumentAfterUnknown() throws Exception { | |||
String[] output = execute("git describe -XYZ -h"); | |||
String[] output = executeUnchecked("git describe -XYZ -h"); | |||
String all = Arrays.toString(output); | |||
assertTrue("Unexpected help output: " + all, | |||
all.contains("jgit describe")); |
@@ -195,7 +195,7 @@ public class MergeTest extends CLIRepositoryTestCase { | |||
@Test | |||
public void testNoFastForwardAndSquash() throws Exception { | |||
assertEquals("fatal: You cannot combine --squash with --no-ff.", | |||
execute("git merge master --no-ff --squash")[0]); | |||
executeUnchecked("git merge master --no-ff --squash")[0]); | |||
} | |||
@Test | |||
@@ -210,7 +210,7 @@ public class MergeTest extends CLIRepositoryTestCase { | |||
git.commit().setMessage("commit#2").call(); | |||
assertEquals("fatal: Not possible to fast-forward, aborting.", | |||
execute("git merge master --ff-only")[0]); | |||
executeUnchecked("git merge master --ff-only")[0]); | |||
} | |||
@Test |
@@ -103,7 +103,7 @@ public class RepoTest extends CLIRepositoryTestCase { | |||
@Test | |||
public void testMissingPath() throws Exception { | |||
assertEquals("fatal: Argument \"path\" is required", | |||
execute("git repo")[0]); | |||
executeUnchecked("git repo")[0]); | |||
} | |||
/** |
@@ -68,6 +68,6 @@ public class TagTest extends CLIRepositoryTestCase { | |||
git.commit().setMessage("commit").call(); | |||
assertEquals("fatal: tag 'test' already exists", | |||
execute("git tag test")[0]); | |||
executeUnchecked("git tag test")[0]); | |||
} | |||
} |