From 02ade82b345ea976d12c32547fb097e726fa44fb Mon Sep 17 00:00:00 2001 From: Andrey Loskutov Date: Thu, 31 Dec 2015 00:48:07 +0100 Subject: [PATCH] Make sure tests don't blindly continue if a command is "silently" failed 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 --- .../jgit/lib/CLIRepositoryTestCase.java | 51 +++++++++++++++++-- .../tst/org/eclipse/jgit/pgm/AddTest.java | 2 +- .../tst/org/eclipse/jgit/pgm/ArchiveTest.java | 3 +- .../tst/org/eclipse/jgit/pgm/BranchTest.java | 2 +- .../org/eclipse/jgit/pgm/CheckoutTest.java | 4 +- .../tst/org/eclipse/jgit/pgm/CommitTest.java | 12 ----- .../org/eclipse/jgit/pgm/DescribeTest.java | 6 +-- .../tst/org/eclipse/jgit/pgm/MergeTest.java | 4 +- .../tst/org/eclipse/jgit/pgm/RepoTest.java | 2 +- .../tst/org/eclipse/jgit/pgm/TagTest.java | 2 +- 10 files changed, 59 insertions(+), 29 deletions(-) diff --git a/org.eclipse.jgit.pgm.test/src/org/eclipse/jgit/lib/CLIRepositoryTestCase.java b/org.eclipse.jgit.pgm.test/src/org/eclipse/jgit/lib/CLIRepositoryTestCase.java index 4bf9b43cbb..a72af9a1c4 100644 --- a/org.eclipse.jgit.pgm.test/src/org/eclipse/jgit/lib/CLIRepositoryTestCase.java +++ b/org.eclipse.jgit.pgm.test/src/org/eclipse/jgit/lib/CLIRepositoryTestCase.java @@ -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 result = new ArrayList(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 result = new ArrayList(cmds.length); + for (String cmd : cmds) { + List 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 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 lines, String str) { + for (String s : lines) { + if (s.contains(str)) { + return true; + } + } + return false; + } } diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/AddTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/AddTest.java index ca3f00f49d..5970913693 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/AddTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/AddTest.java @@ -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 diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ArchiveTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ArchiveTest.java index 9aca2d8236..2e02c762bd 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ArchiveTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ArchiveTest.java @@ -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); } diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/BranchTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/BranchTest.java index 4200cd05cf..f369577ba0 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/BranchTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/BranchTest.java @@ -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]); } } diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java index 167d8ab512..6175b6c06a 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java @@ -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 diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CommitTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CommitTest.java index 360ee5a6ef..721ed15695 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CommitTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CommitTest.java @@ -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(); - } } diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/DescribeTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/DescribeTest.java index 1c8ba0c2f6..a50b243ee8 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/DescribeTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/DescribeTest.java @@ -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")); diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/MergeTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/MergeTest.java index 975e8c4f76..641e59b04a 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/MergeTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/MergeTest.java @@ -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 diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/RepoTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/RepoTest.java index 85fc1dbb4b..715682755c 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/RepoTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/RepoTest.java @@ -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]); } /** diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/TagTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/TagTest.java index ab09db5a56..0fe25f550a 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/TagTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/TagTest.java @@ -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]); } } -- 2.39.5