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("2005-12-03");
96      }
97  
98      public void testInvalidVersions()
99      {
100         assertInvalidVersion("");
101         assertInvalidVersion(null);
102         assertInvalidVersion("%^&%#");
103     }
104 
105 
106     public void testSnapshots()
107     {
108         assertTrue(VersionStringComparator.isSnapshotVersion("1.0-SNAPSHOT"));
109         assertFalse(VersionStringComparator.isSnapshotVersion("1.0-snapshot"));
110         assertFalse(VersionStringComparator.isSnapshotVersion("1.0-SNAPSHOT-1"));
111         assertSecondGreater("1.0-SNAPSHOT", "1.0");
112         assertSecondGreater("1.0", "1.0.1-SNAPSHOT");
113         assertSecondGreater("1.0", "1.1-SNAPSHOT");
114         assertSecondGreater("1.1-m1","1.1-SNAPSHOT");
115         assertBothSame("1.1-SNAPSHOT","1.1-SNAPSHOT");
116     }
117 
118     private void assertSecondGreater(final String first, final String second)
119     {
120         assertValidVersion(first);
121         assertValidVersion(second);
122 
123         // check both are reflexive
124         assertBothSame(first, first);
125         assertBothSame(second, second);
126 
127         // check for symmetry
128         assertTrue(first.toString() + " < " + second.toString(), comparator.compare(second, first) > 0);
129         assertTrue(first.toString() + " < " + second.toString(), comparator.compare(first, second) < 0);
130     }
131 
132     private void assertValidVersion(final String string)
133     {
134         assertTrue(VersionStringComparator.isValidVersionString(string));
135     }
136 
137     private void assertInvalidVersion(final String string)
138     {
139         assertFalse(VersionStringComparator.isValidVersionString(string));
140     }
141 
142     private void assertBothSame(final String first, final String second)
143     {
144         assertEquals(first.toString() + " == " + second.toString(), 0, comparator.compare(first, second));
145     }
146 }