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