package com.intellij.util.text; import com.intellij.openapi.util.text.StringUtil; import junit.framework.Assert; import junit.framework.TestCase; import java.util.Collection; public class VersionComparatorTest extends TestCase { public void testNulls() { assertVerGreater("a", null); assertVerLess(null, "null"); assertVerEquals(null, null); } public void testSplit() { assertStrsEquals(new String[]{"a", "b"}, VersionComparatorUtil.splitVersionString("a b")); assertStrsEquals(new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "#ab"}, VersionComparatorUtil.splitVersionString("1(2)3.4.5_6;7:/8,9 10+11~12#ab")); assertStrsEquals(new String[]{"ab", "12", "ba", "6"}, VersionComparatorUtil.splitVersionString("ab12ba6")); assertStrsEquals(new String[]{"ab", "12", "ba"}, VersionComparatorUtil.splitVersionString("ab12ba")); assertStrsEquals(new String[]{"12", "ba"}, VersionComparatorUtil.splitVersionString("12ba")); assertStrsEquals(new String[]{"12", "ba", "9"}, VersionComparatorUtil.splitVersionString("12ba9")); assertStrsEquals(new String[]{"1", "0", "RC", "2"}, VersionComparatorUtil.splitVersionString("1.0RC2")); assertStrsEquals(new String[]{"1", "0", "M", "1"}, VersionComparatorUtil.splitVersionString("1.0M1")); assertStrsEquals(new String[]{"000123456789"}, VersionComparatorUtil.splitVersionString("000123456789")); assertStrsEquals(new String[]{""}, VersionComparatorUtil.splitVersionString("")); } public void testExamples() { assertVerEquals("1", "1"); assertVerLess("1", "2"); assertVerEquals("1.0.", "1.0"); assertVerLess("1.0", "2.0"); assertVerGreater("1.2", "1.02"); assertVerGreater("1.1", "1.02"); assertVerLess("1.1e", "1.1f"); assertVerGreater("1.1", "1.02"); assertVerGreater("1.01", "1.002"); assertVerLess("1.01", "1.02"); assertVerLess("1.35", "1.36"); assertVerGreater("2.35", "1.36"); assertVerLess("1.0rc1", "1.0release"); assertVerGreater("1.0", "1.0rc"); assertVerGreater("1.0.1", "1.0sp3"); assertVerLess("1.02", "1.12"); assertVerGreater("1.0sp", "1.0"); assertVerLess("1.0bred", "1.0.1"); assertVerEquals("1.3.0", "1.3"); assertVerLess("r.1", "r.666"); assertVerGreater("1.6-beta-1", "1.5.6"); assertVerLess("2.7.1.final", "2.7.2.rc1"); assertVerGreater("2.7.1.final", "2.7.1.rc1"); assertVerLess("1.0M1", "1.0RC2"); assertVerGreater( "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112", "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); } public void testFormal() { assertVerEquals("7-snapshot", "7-sNaP"); assertVerEquals("7-alpha", "7-a"); assertVerEquals("7-beta", "7-b"); assertVerEquals("7-rel", "7-release"); assertVerEquals("7-rel", "7-r"); assertVerEquals("7-rel", "7-final"); assertVerLess("snapshot", "m"); assertVerLess("m", "eap"); assertVerLess("eap", "alpha"); assertVerLess("alpha", "beta"); assertVerLess("beta", "rc"); assertVerLess("rc", ""); assertVerLess("", "sp"); assertVerLess("sp", "release"); assertVerLess("release", "trash"); assertVerLess("trash", "1"); assertVerLess("preview", "p"); } private void assertStrsEquals(String[] expected, Collection<String> actual) { Assert.assertEquals(StringUtil.join(expected, "^"), StringUtil.join(actual, "^")); } private void assertVerEquals(final String v1, final String v2) { assertEquals(0, VersionComparatorUtil.compare(v1, v2)); } private void assertVerLess(final String v1, final String v2) { assertTrue(VersionComparatorUtil.compare(v1, v2) < 0); assertTrue(VersionComparatorUtil.compare(v2, v1) > 0); assertVerEquals(v1, v1); assertVerEquals(v2, v2); } private void assertVerGreater(final String v1, final String v2) { assertTrue(VersionComparatorUtil.compare(v1, v2) > 0); assertTrue(VersionComparatorUtil.compare(v2, v1) < 0); assertVerEquals(v1, v1); assertVerEquals(v2, v2); } }