View Javadoc

1   package com.atlassian.plugin.util;
2   
3   import junit.framework.TestCase;
4   
5   public class TestVersionStringComparator extends TestCase
6   {
7       private final VersionStringComparator comparator = new VersionStringComparator();
8   
9       public void testIntegers()
10      {
11          assertSecondGreater("0", "1");
12          assertSecondGreater("1", "2");
13          assertSecondGreater("75", "1000");
14      }
15  
16      public void testOneDot()
17      {
18          assertSecondGreater("0.1", "0.2");
19          assertSecondGreater("0.9", "1.0");
20          assertSecondGreater("1.1", "1.10");
21          assertSecondGreater("1.1", "1.19");
22          assertSecondGreater("3.75", "4.19");
23          assertSecondGreater("0.1", "1");
24          assertSecondGreater("0.9", "1");
25      }
26  
27      public void testTwoDots()
28      {
29          assertSecondGreater("0.0.1", "0.0.2");
30          assertSecondGreater("0.9.0", "1.0.0");
31          assertSecondGreater("1.0", "1.0.1");
32          assertSecondGreater("1.1.0", "1.10.0");
33          assertSecondGreater("1.1.9", "1.19");
34          assertSecondGreater("3.56.75", "4.46.19");
35      }
36  
37      public void testMoreDots()
38      {
39          assertSecondGreater("0.0.0.1", "0.0.0.2");
40          assertSecondGreater("0.0.0.1", "0.0.1.0");
41          assertSecondGreater("2.5.7.3", "2.5.8.1");
42          assertSecondGreater("27.5.27.3.12", "56.5.8.1");
43      }
44  
45      public void testLetters()
46      {
47          assertSecondGreater("0.1a", "0.1b");
48          assertSecondGreater("0.1-alpha", "0.2-beta");
49          assertSecondGreater("2.3-dr1", "2.3-dr2");
50          assertSecondGreater("2.3-dr1", "2.3-DR2");
51          assertSecondGreater("2.3-dr1", "2.3");
52          assertSecondGreater("1.0-rc1", "1.0");
53          assertSecondGreater("1.0a", "1.1");
54          assertSecondGreater("1.0a", "1.1a");
55          assertSecondGreater("1.0a", "2.0a");
56          assertSecondGreater("1.5", "1.6a");
57          assertSecondGreater("1.2-m2", "1.2.0");
58          assertSecondGreater("1.2-m2", "1.2.1");
59      }
60  
61      public void testBetas()
62      {
63          assertSecondGreater("1.0-beta1", "1.0-beta2");
64          assertSecondGreater("1.0-beta", "1.0-beta2");
65      }
66  
67      public void testDates()
68      {
69          assertSecondGreater("2006-01-12", "2006-10-07");
70          assertSecondGreater("2006.01.12", "2006-10-07");
71          assertSecondGreater("20060112", "20061007");
72      }
73  
74      /**
75       * Unfortunate side-effects of the implementation that can't be avoided
76       */
77      public void testUnintuitiveCases()
78      {
79          assertBothSame("1.01", "1.1");
80          assertSecondGreater("1.0a", "1.0");
81  //        assertSecondGreater("1.0", "1.0a");
82          assertSecondGreater("1.0-beta10", "1.0-beta2");
83      }
84  
85      public void testValidVersions()
86      {
87          assertValidVersion("1");
88          assertValidVersion("1.0");
89          assertValidVersion("1.2.0");
90          assertValidVersion("1.2.0.56");
91          assertValidVersion("0.223.0.56");
92          assertValidVersion("2.3-beta1");
93          assertValidVersion("alpha");
94          assertValidVersion("beta");
95          assertValidVersion("2,1,3");
96          assertValidVersion("2005-12-03");
97      }
98  
99      public void testInvalidVersions()
100     {
101         assertInvalidVersion("");
102         assertInvalidVersion(null);
103         assertInvalidVersion("%^&%#");
104     }
105 
106     private void assertSecondGreater(final String first, final String second)
107     {
108         assertValidVersion(first);
109         assertValidVersion(second);
110 
111         // check both are reflexive
112         assertBothSame(first, first);
113         assertBothSame(second, second);
114 
115         // check for symmetry
116         assertTrue(first.toString() + " < " + second.toString(), comparator.compare(second, first) > 0);
117         assertTrue(first.toString() + " < " + second.toString(), comparator.compare(first, second) < 0);
118     }
119 
120     private void assertValidVersion(final String string)
121     {
122         assertTrue(VersionStringComparator.isValidVersionString(string));
123     }
124 
125     private void assertInvalidVersion(final String string)
126     {
127         assertFalse(VersionStringComparator.isValidVersionString(string));
128     }
129 
130     private void assertBothSame(final String first, final String second)
131     {
132         assertEquals(first.toString() + " == " + second.toString(), 0, comparator.compare(first, second));
133     }
134 }