blob: 04dcbc399911b1e600c8eba9c63c70fcdd57fac3 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package hg4idea.test.version;
import com.intellij.openapi.vcs.VcsTestUtil;
import hg4idea.test.HgPlatformTest;
import org.zmlx.hg4idea.util.HgVersion;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* @author Nadya Zabrodina
*/
public class HgVersionTest extends HgPlatformTest {
//todo: should be changed to Junit Parameterized tests
private static final TestHgVersion[] commonTests = {
new TestHgVersion("Mercurial Distributed SCM (version 2.6.2)", 2, 6, 2),
new TestHgVersion("Mercurial Distributed SCM (version 2.6+20130507)", 2, 6, 0),
new TestHgVersion("Mercurial Distributed SCM (version 1.9.5)", 1, 9, 5),
new TestHgVersion("Mercurial Distributed SCM (version 2.6)", 2, 6, 0),
new TestHgVersion("Mercurial Distributed SCM (version 2.7-rc+5-ca2dfc2f63eb)", 2, 7, 0),
new TestHgVersion("Распределенная SCM Mercurial (версия 2.0.2)", 2, 0, 2),
new TestHgVersion("Mercurial Distributed SCM (version 2.4.2+20130102)", 2, 4, 2),
new TestHgVersion("Распределенная SCM Mercurial (версия 2.6.1)", 2, 6, 1),
new TestHgVersion("[Mercurial Distributed SCM (version 2.6.2+20130606)]", 2, 6, 2),
new TestHgVersion("[Mercurial Distributed SCM (version 2.4.2+20130203)]\n", 2, 4, 2),
new TestHgVersion("Mercurial Distributed SCM (version 2.6.2)\n", 2, 6, 2),
new TestHgVersion("Mercurial Distributed SCM (version 2.7+93-f959b60e3025)", 2, 7, 0)
};
public void testParseSupported() throws Exception {
for (TestHgVersion test : commonTests) {
HgVersion version = HgVersion.parseVersionAndExtensionInfo(test.output, Collections.<String>emptyList());
assertEqualVersions(version, test);
assertTrue(version.isSupported());
}
}
public void testParseUnsupported() throws Exception {
TestHgVersion unsupportedVersion = new TestHgVersion("Mercurial Distributed SCM (version 1.5.1)", 1, 5, 1);
HgVersion parsedVersion =
HgVersion.parseVersionAndExtensionInfo(unsupportedVersion.output, Collections.<String>emptyList());
assertEqualVersions(parsedVersion, unsupportedVersion);
assertFalse(parsedVersion.isSupported());
}
public void testParseImportExtensionsError() {
List<String> errorLines = Arrays.asList("*** failed to import extension hgcr-gui: No module named hgcr-gui",
"*** failed to import extension hgcr-gui-qt: No module named hgcr-gui-qt");
VcsTestUtil.assertEqualCollections(HgVersion.parseUnsupportedExtensions(errorLines), Arrays.asList("hgcr-gui", "hgcr-gui-qt"));
}
public void testParseImportDeprecatedExtensionsError() {
List<String> errorLines = Arrays.asList("*** failed to import extension kilnpath from" +
" C:\\Users\\Developer\\AppData\\Local\\KilnExtensions\\kilnpath.py:" +
" kilnpath is deprecated, and does not work in Mercurial 2.3 or higher." +
" Use the official schemes extension instead");
VcsTestUtil.assertEqualCollections(HgVersion.parseUnsupportedExtensions(errorLines), Arrays.asList("kilnpath"));
}
private static void assertEqualVersions(HgVersion actual, TestHgVersion expected) throws Exception {
Field field = HgVersion.class.getDeclaredField("myMajor");
field.setAccessible(true);
final int major = field.getInt(actual);
field = HgVersion.class.getDeclaredField("myMiddle");
field.setAccessible(true);
final int middle = field.getInt(actual);
field = HgVersion.class.getDeclaredField("myMinor");
field.setAccessible(true);
final int minor = field.getInt(actual);
assertEquals(major, expected.major);
assertEquals(middle, expected.middle);
assertEquals(minor, expected.minor);
HgVersion versionFromTest = new HgVersion(expected.major, expected.middle, expected.minor);
assertEquals(versionFromTest, actual); //test equals method
}
private static class TestHgVersion {
private final String output;
private final int major;
private final int middle;
private final int minor;
public TestHgVersion(String output, int major, int middle, int minor) {
this.output = output;
this.major = major;
this.middle = middle;
this.minor = minor;
}
}
}