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 testLongString(){
28          assertSecondGreater("1.0-1414575567068", "1.0-1414575567069");
29          assertBothSame("1.0-1414575567068", "1.0-00000000000000000001414575567068");
30      }
31  
32      public void testTwoDots()
33      {
34          assertSecondGreater("0.0.1", "0.0.2");
35          assertSecondGreater("0.9.0", "1.0.0");
36          assertSecondGreater("1.0", "1.0.1");
37          assertSecondGreater("1.1.0", "1.10.0");
38          assertSecondGreater("1.1.9", "1.19");
39          assertSecondGreater("3.56.75", "4.46.19");
40      }
41  
42      public void testMoreDots()
43      {
44          assertSecondGreater("0.0.0.1", "0.0.0.2");
45          assertSecondGreater("0.0.0.1", "0.0.1.0");
46          assertSecondGreater("2.5.7.3", "2.5.8.1");
47          assertSecondGreater("27.5.27.3.12", "56.5.8.1");
48      }
49  
50      public void testLetters()
51      {
52          assertSecondGreater("0.1a", "0.1b");
53          assertSecondGreater("0.1-alpha", "0.2-beta");
54          assertSecondGreater("2.3-dr1", "2.3-dr2");
55          assertSecondGreater("2.3-dr1", "2.3-DR2");
56          assertSecondGreater("2.3-dr1", "2.3");
57          assertSecondGreater("1.0-rc1", "1.0");
58          assertSecondGreater("1.0a", "1.1");
59          assertSecondGreater("1.0a", "1.1a");
60          assertSecondGreater("1.0a", "2.0a");
61          assertSecondGreater("1.5", "1.6a");
62          assertSecondGreater("1.2-m2", "1.2.0");
63          assertSecondGreater("1.2-m2", "1.2.1");
64      }
65  
66      public void testBetas()
67      {
68          assertSecondGreater("1.0-beta1", "1.0-beta2");
69          assertSecondGreater("1.0-beta", "1.0-beta2");
70      }
71  
72      public void testDates()
73      {
74          assertSecondGreater("2006-01-12", "2006-10-07");
75          assertSecondGreater("2006.01.12", "2006-10-07");
76          assertSecondGreater("20060112", "20061007");
77      }
78  
79      /**
80       * Unfortunate side-effects of the implementation that can't be avoided
81       */
82      public void testUnintuitiveCases()
83      {
84          assertBothSame("1.01", "1.1");
85          assertSecondGreater("1.0a", "1.0");
86  //        assertSecondGreater("1.0", "1.0a");
87          assertSecondGreater("1.0-beta10", "1.0-beta2");
88      }
89  
90      public void testValidVersions()
91      {
92          assertValidVersion("1");
93          assertValidVersion("1.0");
94          assertValidVersion("1.2.0");
95          assertValidVersion("1.2.0.56");
96          assertValidVersion("0.223.0.56");
97          assertValidVersion("2.3-beta1");
98          assertValidVersion("alpha");
99          assertValidVersion("beta");
100         assertValidVersion("2005-12-03");
101     }
102 
103     public void testInvalidVersions()
104     {
105         assertInvalidVersion("");
106         assertInvalidVersion(null);
107         assertInvalidVersion("%^&%#");
108     }
109 
110 
111     public void testSnapshots()
112     {
113         assertTrue(VersionStringComparator.isSnapshotVersion("1.0-SNAPSHOT"));
114         assertFalse(VersionStringComparator.isSnapshotVersion("1.0-snapshot"));
115         assertFalse(VersionStringComparator.isSnapshotVersion("1.0-SNAPSHOT-1"));
116         assertSecondGreater("1.0-SNAPSHOT", "1.0");
117         assertSecondGreater("1.0", "1.0.1-SNAPSHOT");
118         assertSecondGreater("1.0", "1.1-SNAPSHOT");
119         assertSecondGreater("1.1-m1","1.1-SNAPSHOT");
120         assertBothSame("1.1-SNAPSHOT","1.1-SNAPSHOT");
121     }
122 
123     private void assertSecondGreater(final String first, final String second)
124     {
125         assertValidVersion(first);
126         assertValidVersion(second);
127 
128         // check both are reflexive
129         assertBothSame(first, first);
130         assertBothSame(second, second);
131 
132         // check for symmetry
133         assertTrue(first.toString() + " < " + second.toString(), comparator.compare(second, first) > 0);
134         assertTrue(first.toString() + " < " + second.toString(), comparator.compare(first, second) < 0);
135     }
136 
137     private void assertValidVersion(final String string)
138     {
139         assertTrue(VersionStringComparator.isValidVersionString(string));
140     }
141 
142     private void assertInvalidVersion(final String string)
143     {
144         assertFalse(VersionStringComparator.isValidVersionString(string));
145     }
146 
147     private void assertBothSame(final String first, final String second)
148     {
149         assertEquals(first.toString() + " == " + second.toString(), 0, comparator.compare(first, second));
150     }
151 }