aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.pgm.test/src/org/eclipse/jgit/lib/CLIRepositoryTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit.pgm.test/src/org/eclipse/jgit/lib/CLIRepositoryTestCase.java')
-rw-r--r--org.eclipse.jgit.pgm.test/src/org/eclipse/jgit/lib/CLIRepositoryTestCase.java90
1 files changed, 90 insertions, 0 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 400927e0a0..755174bcbc 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
@@ -42,6 +42,8 @@
*/
package org.eclipse.jgit.lib;
+import static org.junit.Assert.assertEquals;
+
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -83,4 +85,92 @@ public class CLIRepositoryTestCase extends LocalDiskRepositoryTestCase {
protected void deleteTrashFile(final String name) throws IOException {
JGitTestUtil.deleteTrashFile(db, name);
}
+
+ /**
+ * Execute the given commands and print the output to stdout. Use this
+ * function instead of the normal {@link #execute(String...)} when preparing
+ * a test case: the command is executed and then its output is printed on
+ * stdout, thus making it easier to prepare the correct command and expected
+ * output for the test case.
+ *
+ * @param cmds
+ * The commands to execute
+ * @return the result of the command, see {@link #execute(String...)}
+ * @throws Exception
+ */
+ protected String[] executeAndPrint(String... cmds) throws Exception {
+ String[] lines = execute(cmds);
+ for (String line : lines) {
+ System.out.println(line);
+ }
+ return lines;
+ }
+
+ /**
+ * Execute the given commands and print test code comparing expected and
+ * actual output. Use this function instead of the normal
+ * {@link #execute(String...)} when preparing a test case: the command is
+ * executed and test code is generated using the command output as a
+ * template of what is expected. The code generated is printed on stdout and
+ * can be pasted in the test case function.
+ *
+ * @param cmds
+ * The commands to execute
+ * @return the result of the command, see {@link #execute(String...)}
+ * @throws Exception
+ */
+ protected String[] executeAndPrintTestCode(String... cmds) throws Exception {
+ String[] lines = execute(cmds);
+ String cmdString = cmdString(cmds);
+ if (lines.length == 0)
+ System.out.println("\t\tassertTrue(execute(" + cmdString
+ + ").length == 0);");
+ else {
+ System.out
+ .println("\t\tassertArrayOfLinesEquals(new String[] { //");
+ System.out.print("\t\t\t\t\t\t\"" + escapeJava(lines[0]));
+ for (int i=1; i<lines.length; i++) {
+ System.out.println("\", //");
+ System.out.print("\t\t\t\t\t\t\"" + escapeJava(lines[i]));
+ }
+ System.out.println("\" //");
+ System.out.println("\t\t\t\t}, execute(" + cmdString + ")); //");
+ }
+ return lines;
+ }
+
+ protected String cmdString(String... cmds) {
+ if (cmds.length == 0)
+ return "";
+ else if (cmds.length == 1)
+ return "\"" + escapeJava(cmds[0]) + "\"";
+ else {
+ StringBuilder sb = new StringBuilder(cmdString(cmds[0]));
+ for (int i=1; i<cmds.length; i++) {
+ sb.append(", ");
+ sb.append(cmdString(cmds[i]));
+ }
+ return sb.toString();
+ }
+ }
+
+ protected String escapeJava(String line) {
+ // very crude implementation but ok for generating test code
+ return line.replaceAll("\"", "\\\\\"") //
+ .replaceAll("\\\\", "\\\\\\")
+ .replaceAll("\t", "\\\\t");
+ }
+
+ protected void assertArrayOfLinesEquals(String[] expected, String[] actual) {
+ assertEquals(toText(expected), toText(actual));
+ }
+
+ private String toText(String[] lines) {
+ StringBuilder b = new StringBuilder();
+ for (String s : lines) {
+ b.append(s);
+ b.append('\n');
+ }
+ return b.toString();
+ }
}