Browse Source

Fix ValidRefNameTest on Windows

There are certain ref names which native git can be create only on
non-windows systems (e.g. "refs/tags/>"). On Windows systems we can't
persist this refs because the ref names are not valid file names. Our
tests in ValidRefNameTest assumed that these are valid refs on all
systems. This broke the tests on Windows.

Change-Id: Ic53c396c88b84cbdf579a636953f7519952270c0
stable-3.4
Robin Rosenberg 11 years ago committed by Robin Stocker
parent
commit
4a11b7137f
  1. 70
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java

70
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java

@ -51,7 +51,47 @@ import org.junit.Test;
public class ValidRefNameTest { public class ValidRefNameTest {
private static void assertValid(final boolean exp, final String name) { private static void assertValid(final boolean exp, final String name) {
assertEquals("\"" + name + "\"", exp, Repository.isValidRefName(name)); SystemReader instance = SystemReader.getInstance();
try {
setUnixSystemReader();
assertEquals("\"" + name + "\"", exp,
Repository.isValidRefName(name));
setWindowsSystemReader();
assertEquals("\"" + name + "\"", exp,
Repository.isValidRefName(name));
} finally {
SystemReader.setInstance(instance);
}
}
private static void setWindowsSystemReader() {
SystemReader.setInstance(new MockSystemReader() {
{
setWindows();
}
});
}
private static void setUnixSystemReader() {
SystemReader.setInstance(new MockSystemReader() {
{
setUnix();
}
});
}
private static void assertInvalidOnWindows(final String name) {
SystemReader instance = SystemReader.getInstance();
try {
setUnixSystemReader();
assertEquals("\"" + name + "\"", true,
Repository.isValidRefName(name));
setWindowsSystemReader();
assertEquals("\"" + name + "\"", false,
Repository.isValidRefName(name));
} finally {
SystemReader.setInstance(instance);
}
} }
@Test @Test
@ -153,9 +193,8 @@ public class ValidRefNameTest {
} }
@Test @Test
public void testValidSpecialCharacters() { public void testValidSpecialCharacterUnixs() {
assertValid(true, "refs/heads/!"); assertValid(true, "refs/heads/!");
assertValid(true, "refs/heads/\"");
assertValid(true, "refs/heads/#"); assertValid(true, "refs/heads/#");
assertValid(true, "refs/heads/$"); assertValid(true, "refs/heads/$");
assertValid(true, "refs/heads/%"); assertValid(true, "refs/heads/%");
@ -167,21 +206,24 @@ public class ValidRefNameTest {
assertValid(true, "refs/heads/,"); assertValid(true, "refs/heads/,");
assertValid(true, "refs/heads/-"); assertValid(true, "refs/heads/-");
assertValid(true, "refs/heads/;"); assertValid(true, "refs/heads/;");
assertValid(true, "refs/heads/<");
assertValid(true, "refs/heads/="); assertValid(true, "refs/heads/=");
assertValid(true, "refs/heads/>");
assertValid(true, "refs/heads/@"); assertValid(true, "refs/heads/@");
assertValid(true, "refs/heads/]"); assertValid(true, "refs/heads/]");
assertValid(true, "refs/heads/_"); assertValid(true, "refs/heads/_");
assertValid(true, "refs/heads/`"); assertValid(true, "refs/heads/`");
assertValid(true, "refs/heads/{"); assertValid(true, "refs/heads/{");
assertValid(true, "refs/heads/|");
assertValid(true, "refs/heads/}"); assertValid(true, "refs/heads/}");
// This is valid on UNIX, but not on Windows // This is valid on UNIX, but not on Windows
// hence we make in invalid due to non-portability // hence we make in invalid due to non-portability
// //
assertValid(false, "refs/heads/\\"); assertValid(false, "refs/heads/\\");
// More invalid characters on Windows, but we allow them
assertInvalidOnWindows("refs/heads/\"");
assertInvalidOnWindows("refs/heads/<");
assertInvalidOnWindows("refs/heads/>");
assertInvalidOnWindows("refs/heads/|");
} }
@Test @Test
@ -197,22 +239,12 @@ public class ValidRefNameTest {
@Test @Test
public void testWindowsReservedNames() { public void testWindowsReservedNames() {
SystemReader original = SystemReader.getInstance();
try {
SystemReader.setInstance(new MockSystemReader() {
public boolean isWindows() {
return true;
}
});
// re-using code from DirCacheCheckoutTest, hence // re-using code from DirCacheCheckoutTest, hence
// only testing for one of the special names. // only testing for one of the special names.
assertValid(false, "refs/heads/con"); assertInvalidOnWindows("refs/heads/con");
assertValid(false, "refs/con/x"); assertInvalidOnWindows("refs/con/x");
assertValid(false, "con/heads/x"); assertInvalidOnWindows("con/heads/x");
assertValid(true, "refs/heads/conx"); assertValid(true, "refs/heads/conx");
assertValid(true, "refs/heads/xcon"); assertValid(true, "refs/heads/xcon");
} finally {
SystemReader.setInstance(original);
}
} }
} }

Loading…
Cancel
Save