@ -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 ( ) ;
}
}