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
81
82 public void testUnintuitiveCases()
83 {
84 assertBothSame("1.01", "1.1");
85 assertSecondGreater("1.0a", "1.0");
86
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
129 assertBothSame(first, first);
130 assertBothSame(second, second);
131
132
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 }