Skip to content

Commit 37880d2

Browse files
committed
Better handling of fileNames on different OS
1 parent 90c333f commit 37880d2

11 files changed

+58
-12
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.approvaltests;
2+
3+
import org.approvaltests.legacycode.LegacyApprovals;
4+
5+
public class CombinationApprovals
6+
{
7+
public static void verifyAllCombinations(Object call, String method, Object[]... parametersVariations)
8+
throws Exception
9+
{
10+
LegacyApprovals.LockDown(call, method, parametersVariations);
11+
}
12+
}

java/org/approvaltests/reporters/GenericDiffReporter.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
import java.util.Arrays;
55
import java.util.List;
66

7+
import com.spun.util.SystemUtils;
78
import com.spun.util.io.FileUtils;
89

910
public class GenericDiffReporter implements EnvironmentAwareReporter
1011
{
12+
public static final String STANDARD_ARGUMENTS = "%s %s";
1113
public static boolean REPORT_MISSING_FILES = false;
1214
protected String diffProgram;
1315
protected String arguments;
@@ -19,7 +21,7 @@ public class GenericDiffReporter implements EnvironmentAwareReporter
1921
".tif", ".tiff");
2022
public GenericDiffReporter(String diffProgram, String diffProgramNotFoundMessage)
2123
{
22-
this(diffProgram, "\"%s\" \"%s\"", diffProgramNotFoundMessage);
24+
this(diffProgram, STANDARD_ARGUMENTS, diffProgramNotFoundMessage);
2325
}
2426
private GenericDiffReporter(String diffProgram, String argumentsFormat, String diffProgramNotFoundMessage)
2527
{
@@ -38,11 +40,31 @@ public void report(String received, String approved) throws Exception
3840
{
3941
if (!isWorkingInThisEnvironment(received)) { throw new RuntimeException(diffProgramNotFoundMessage); }
4042
FileUtils.createIfNeeded(approved);
41-
Process exec = Runtime.getRuntime().exec(getCommandLine(received, approved));
43+
Process exec = Runtime.getRuntime().exec(
44+
getCommandLine(convertFileForCommandLine(received), convertFileForCommandLine(approved)));
4245
// int waitFor = exec.waitFor();
4346
// String text = DatabaseLifeCycleUtils.extractText(exec.getErrorStream());
4447
// System.out.println(waitFor + text);
4548
}
49+
public static String convertFileForCommandLine(String fileName)
50+
{
51+
return convertFileForCommandLine(fileName, SystemUtils.isWindowsEnviroment());
52+
}
53+
public static String convertFileForCommandLine(String fileName, boolean windowsOs)
54+
{
55+
if (!fileName.contains(" "))
56+
{
57+
return fileName;
58+
}
59+
else if (windowsOs)
60+
{
61+
return String.format("\"%s\"", fileName);
62+
}
63+
else
64+
{
65+
return fileName.replace(" ", "\\ ");
66+
}
67+
}
4668
public String getCommandLine(String received, String approved)
4769
{
4870
String command = "%s " + arguments;

java/org/approvaltests/reporters/macosx/DiffMergeReporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ public class DiffMergeReporter extends GenericDiffReporter
1212
public static final DiffMergeReporter INSTANCE = new DiffMergeReporter();
1313
public DiffMergeReporter()
1414
{
15-
super(DIFF_PROGRAM, "%s %s", MESSAGE, GenericDiffReporter.TEXT_FILE_EXTENSIONS);
15+
super(DIFF_PROGRAM, GenericDiffReporter.STANDARD_ARGUMENTS, MESSAGE, GenericDiffReporter.TEXT_FILE_EXTENSIONS);
1616
}
1717
}

java/org/approvaltests/reporters/macosx/KaleidoscopeDiffReporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ public class KaleidoscopeDiffReporter extends GenericDiffReporter
1919
public static final KaleidoscopeDiffReporter INSTANCE = new KaleidoscopeDiffReporter();
2020
public KaleidoscopeDiffReporter()
2121
{
22-
super(DIFF_PROGRAM, "%s %s", MESSAGE, fileTypes);
22+
super(DIFF_PROGRAM, GenericDiffReporter.STANDARD_ARGUMENTS, MESSAGE, fileTypes);
2323
}
2424
}

java/org/approvaltests/reporters/macosx/P4MergeReporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ public class P4MergeReporter extends GenericDiffReporter
2121
public static final P4MergeReporter INSTANCE = new P4MergeReporter();
2222
public P4MergeReporter()
2323
{
24-
super(DIFF_PROGRAM, "%s %s", P4MergeReporter.MESSAGE, fileTypes);
24+
super(DIFF_PROGRAM, GenericDiffReporter.STANDARD_ARGUMENTS, P4MergeReporter.MESSAGE, fileTypes);
2525
}
2626
}

java/org/approvaltests/reporters/macosx/TkDiffReporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ public class TkDiffReporter extends GenericDiffReporter
1212
public static final TkDiffReporter INSTANCE = new TkDiffReporter();
1313
public TkDiffReporter()
1414
{
15-
super(DIFF_PROGRAM, "%s %s", MESSAGE, GenericDiffReporter.TEXT_FILE_EXTENSIONS);
15+
super(DIFF_PROGRAM, GenericDiffReporter.STANDARD_ARGUMENTS, MESSAGE, GenericDiffReporter.TEXT_FILE_EXTENSIONS);
1616
}
1717
}

java/org/approvaltests/reporters/tests/GenericDiffReporterTest.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import junit.framework.TestCase;
66

77
import org.approvaltests.Approvals;
8+
import org.approvaltests.CombinationApprovals;
89
import org.approvaltests.reporters.GenericDiffReporter;
9-
import org.approvaltests.reporters.UseReporter;
1010
import org.approvaltests.reporters.macosx.P4MergeReporter;
1111
import org.approvaltests.reporters.macosx.TkDiffReporter;
1212
import org.approvaltests.reporters.windows.TortoiseTextDiffReporter;
@@ -15,7 +15,6 @@
1515

1616
import com.spun.util.ClassUtils;
1717

18-
@UseReporter(P4MergeReporter.class)
1918
public class GenericDiffReporterTest extends TestCase
2019
{
2120
public void testFileExtensions() throws Exception
@@ -42,6 +41,16 @@ public void testP4Merge() throws Exception
4241
{
4342
approveGenericReporter("a.png", "b.png", new P4MergeReporter());
4443
}
44+
public void testCommandLineFileNames() throws Exception
45+
{
46+
String[] names = {"regular.txt", "with spaces.txt"};
47+
Boolean[] osTypes = {true, false};
48+
CombinationApprovals.verifyAllCombinations(this, "getFileName", names, osTypes);
49+
}
50+
public String getFileName(String name, Boolean osType)
51+
{
52+
return GenericDiffReporter.convertFileForCommandLine(name, osType);
53+
}
4554
private void approveGenericReporter(String a, String b, GenericDiffReporter reporter) throws Exception
4655
{
4756
File directory = ClassUtils.getSourceDirectory(getClass());
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[regular.txt, true] = regular.txt
2+
[with spaces.txt, true] = "with spaces.txt"
3+
[regular.txt, false] = regular.txt
4+
[with spaces.txt, false] = with\ spaces.txt
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
C:\Program Files\TortoiseSVN\bin\TortoiseMerge.exe "%s" "%s"
1+
C:\Program Files\TortoiseSVN\bin\TortoiseMerge.exe %s %s
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
C:\Program Files\WinMerge\WinMergeU.exe "%s" "%s"
1+
C:\Program Files\WinMerge\WinMergeU.exe %s %s

0 commit comments

Comments
 (0)